<span style="font-size:14px;">ArrayList中
[java] view plaincopy
01.package day14;
02.
03.import java.util.ArrayList;
04.import java.util.Iterator;
05.
06./*
07.将自定义对象作为元素存到ArrayList集合中,并去除从父元素。
08.比如:存人对象。同姓名同年龄,视为同一个人,为重复元素。
09.
10.思路:
11.1,对人的描述,将数据封装进人对象。
12.2,定义容器,将人存入。
13.3,取出
14.
15.
16.结论 List 集合判断元素是否相同 ,依据的是元素equals方法
17.*/
18.
19.
20.//人的描述 类
21.class Person{
22. private String name;
23. private int age ;
24.
25.
26. //构造器
27. Person(String name, int age){
28. this.name = name;
29. this.age = age;
30. }
31. public boolean equals(Object obj){
32.
33.
34. if(!(obj instanceof Person))
35. return false;
36.
37. Person p = (Person)obj;
38. System.out.println(this.name+";;;;;;"+p.name);
39.
40. return this.name.equals(p.name)&&this.age==p.age;
41. }
42. //获取
43. public String getName(){
44. return name;
45.
46. }
47.
48. public int getAge(){
49. return age;
50.
51. }
52.
53.}
54.
55.
56.public class ArrayListTest2 {
57.
58. public static void sop(Object obj){
59. System.out.println(obj);
60. }
61. public static void main(String[] args) {
62.//定义一个 集合容器
63. ArrayList al = new ArrayList();
64.
65. //外部 描述类 给容器添加 元素的格式〉〉〉〉〉〉〉〉找 构造器
66. al.add(new Person("lisi01", 30));
67. al.add(new Person("lisi02", 32));
68. al.add(new Person("lisi02", 32));
69. al.add(new Person("lisi03", 33));
70. al.add(new Person("lisi04", 32));
71. al.add(new Person("lisi04", 32));
72. al.add(new Person("lisi05", 35));
73.
74. al = singleElment( al);
75. //遍历取出
76. Iterator it = al.iterator();
77. while(it.hasNext()){
78. //因为a1.add(Object obj);
79. //Object obj = new Person("lisi01",30); 返回值提升了 为Object
80. Person p=(Person)it.next();//〉〉〉〉〉〉所以要强转
81. sop(p.getName()+",,,,,"+p.getAge());
82. }
83.
84.
85. }
86. //唯一元素的 方法
87. public static ArrayList singleElment(ArrayList a1){
88. //定义一个临时容器
89. ArrayList newA1 = new ArrayList();
90. //遍历老集合
91. Iterator it =a1.iterator();
92.
93. while (it.hasNext()){
94. Object obj = it.next();//为什么要obj一下呢???? 拿下一个元素用obj记下来
95. //判断一下 如果不包含下面的一个元素 就往容器集合里面添加元素
96. if(!newA1.contains(obj))//——————————————————————List---中用contains内部调用equals
97. newA1.add(obj);
98.
99. }
100. return newA1;
101. }
102.
103.
104.}
HashSet
[java] view plaincopy
01.package day14;
02.
03.import java.util.HashSet;
04.import java.util.Iterator;
05.
06./*王hashset集合中存入自定义对象
07.姓名和年龄视为同一个人,重复元素*/
08.
09.
10.
11./*HashSet 和Arraylisht 中 equals的区别 〉〉〉〉〉〉〉〉〉〉〉〉〉???????
12. 首先Set存储时无序不可重复的,List是有序可重复的
13. List---中用contains内部调用equals
14. Set----中使用的equals方法是其存入的类(Person或其他)的重写的equals,hashCode方法*/
15.public class HashSetTest {
16.
17. public static void sop(Object obj){
18. System.out.println(obj);
19. }
20.
21. public static void main(String[] args) {
22. HashSet hs = new HashSet();
23.
24. hs.add(new Person("a1",11));
25. hs.add(new Person("a2",12));
26. hs.add(new Person("a3",13));
27. hs.add(new Person("a4",14));
28. hs.add(new Person("a1",11));
29. hs.add(new Person("a2",13));
30.
31. Iterator it =hs.iterator();
32.
33. while(it.hasNext()){
34. Person p=(Person)it.next();//〉〉〉〉〉〉所以要强转>>>>看ArrayListTest2
35. sop(p.getName()+",,,,,"+p.getAge());
36. }
37. }
38.
39.}
40.class Person{
41. private String name;
42. private int age ;
43.
44.
45. //构造器
46. Person(String name, int age){
47. this.name = name;
48. this.age = age;
49. }
50.
51. public int hashCode(){
52. //验证
53. System.out.println(this.name+".....hashCode");
54.
55. //return 60;
56. //为提高效率 返回name.hashCode()+age;
57. //return name.hashCode()+age; 20+30=30+20 总hash值有可能相同 为了尽量保持返回的哈希值 唯一性 随便乘以一个数
58. return name.hashCode()+age*39;
59. }
60. //hashset 判断
61. public boolean equals(Object obj){
62.
63.
64. if(!(obj instanceof Person))
65. return false;
66.
67. Person p = (Person)obj;
68. System.out.println(this.name+";;;equals;;;"+p.name);
69.
70. return this.name.equals(p.name)&&this.age==p.age;
71. }
72. //获取
73. public String getName(){
74. return name;
75.
76. }
77.
78. public int getAge(){
79. return age;
80.
81. }
82.
83.}
</span>