1 import java.util.*; 2 3 /* 4 將自定義對象做爲元素存到ArrayList集合中,並去除重複元素。 5 6 好比:存人對象。同姓名同年齡,視爲同一我的。爲重複元素。 7 8 9 思路: 10 1,對人描述,將數據封裝進人對象。 11 2,定義容器,將人存入。 12 3,取出。 13 14 15 16 List集合判斷元素是否相同,依據是元素的equals方法。 17 18 19 20 */ 21 22 class Person 23 { 24 private String name; 25 private int age; 26 Person(String name,int age) 27 { 28 this.name=name; 29 this.age=age; 30 } 31 public String getName() 32 { 33 return name; 34 } 35 public int getAge() 36 { 37 return age; 38 } 39 40 public boolean equals(Object obj)//必定要複寫父類的equals方法 41 { 42 if (!(obj instanceof Person)) 43 return false; 44 45 Person p=(Person)obj; 46 47 ArrayListTest2.sop(this.name+"-------"+p.name); 48 return this.name.equals(p.name) && this.age == p.age; 49 } 50 } 51 class ArrayListTest2 52 { 53 public static void main(String[] args) 54 { 55 ArrayList al =new ArrayList(); 56 57 al.add(new Person("lili",22)); 58 al.add(new Person("liu",20)); 59 al.add(new Person("who",20)); 60 al.add(new Person("liu",20)); 61 62 sop("remove:。。。。"+al.remove(new Person("liu",20)));//remove方法底層也是調用equals方法 63 64 //sop(al);//[Person@1d10caf0, Person@397b6178, Person@533c2ac3, Person@131b92e6] 65 66 //getElements(al); 67 68 al=singleElement(al); 69 70 71 getElements(al); 72 } 73 74 public static void getElements(ArrayList al) 75 { 76 for (Iterator it =al.iterator();it.hasNext() ;) 77 { 78 //sop(((Person)it.next()).getName()); 79 Person p =(Person)it.next(); 80 sop(p.getName()+"::"+p.getAge()); 81 } 82 } 83 84 public static void sop(Object obj) 85 { 86 System.out.println(obj); 87 } 88 89 public static ArrayList singleElement(ArrayList al) 90 { 91 //定義個臨時容器用於裝載符合條件的對象 92 ArrayList alNew =new ArrayList(); 93 94 95 for (Iterator it =al.iterator(); it.hasNext(); ) 96 { 97 Object obj =it.next(); 98 if (!alNew.contains(obj))//contains方法底層就是調用equals方法 99 alNew.add(obj); 100 } 101 102 return alNew; 103 } 104 } 105 106 import java.util.*; 107 /* 108 |--Set:元素是無序(存入和取出的順序不必定一致),元素不能夠重複。、 109 |--HashSet:底層數據結構是哈希表。是線程不安全的。不一樣步。 110 HashSet是如何保證元素惟一性的呢? 111 是經過元素的兩個方法,hashCode和equals來完成。 112 若是元素的HashCode值相同,纔會判斷equals是否爲true。 113 若是元素的hashcode值不一樣,不會調用equals。 114 115 注意,對於判斷元素是否存在,以及刪除等操做,依賴的方法是元素的hashcode和equals方法。 116 117 118 |--TreeSet: 119 120 Set集合的功能和Collection是一致的。 121 122 123 124 125 */ 126 127 128 class HashSetDemo 129 { 130 public static void sop(Object obj) 131 { 132 System.out.println(obj); 133 } 134 public static void main(String[] args) 135 { 136 137 HashSet hs = new HashSet(); 138 139 sop(hs.add("java01")); 140 sop(hs.add("java01")); 141 hs.add("java02"); 142 hs.add("java03"); 143 hs.add("java03"); 144 hs.add("java04"); 145 146 Iterator it = hs.iterator(); 147 148 while(it.hasNext()) 149 { 150 sop(it.next()); 151 } 152 } 153 } 154 155 156 import java.util.*; 157 158 /* 159 往hashSet集合中存入自定對象 160 姓名和年齡相同爲同一我的,重複元素。 161 162 163 164 165 166 */ 167 class HashSetTest 168 { 169 public static void sop(Object obj) 170 { 171 System.out.println(obj); 172 } 173 public static void main(String[] args) 174 { 175 HashSet hs = new HashSet(); 176 177 hs.add(new Person("a1",11)); 178 hs.add(new Person("a2",12)); 179 hs.add(new Person("a3",13)); 180 // hs.add(new Person("a2",12)); 181 // hs.add(new Person("a4",14)); 182 183 //sop("a1:"+hs.contains(new Person("a2",12))); 184 185 // hs.remove(new Person("a4",13)); 186 187 188 Iterator it = hs.iterator(); 189 190 while(it.hasNext()) 191 { 192 Person p = (Person)it.next(); 193 sop(p.getName()+"::"+p.getAge()); 194 } 195 } 196 } 197 class Person 198 { 199 private String name; 200 private int age; 201 Person(String name,int age) 202 { 203 this.name = name; 204 this.age = age; 205 } 206 207 public int hashCode() 208 { 209 System.out.println(this.name+"....hashCode"); 210 return name.hashCode()+age*37; 211 } 212 213 public boolean equals(Object obj) 214 { 215 216 if(!(obj instanceof Person)) 217 return false; 218 219 Person p = (Person)obj; 220 System.out.println(this.name+"...equals.."+p.name); 221 222 return this.name.equals(p.name) && this.age == p.age; 223 } 224 225 226 public String getName() 227 { 228 return name; 229 } 230 public int getAge() 231 { 232 return age; 233 } 234 } 235 236 /* 237 238 239 */