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 */