集合框架(下)

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

 

posted on 2014-04-09 20:54  JackeeN Liu  阅读(239)  评论(0编辑  收藏  举报