1 /*
2
3 List接口:元素存储有序、带有索引、可以重复元素的集合
4
5 常用子类有ArrayList、LinkedList
6
7 add(Object obj) 向集合末尾处添加指定元素
8
9 add(int index , Object obj)向集合指定索引处添加元素,原有元素依次后移
10
11
12
13 remove(Object obj) 将指定元素对象,从集合中删除,返回值为被删除的元素
14
15 remove(int index) 将指定索引处的元素,从集合中删除,返回值为被删除的元素
16
17
18
19 set(int index , Object o) 将指定索引处的元素,替换成指定元素,返回值为替换前的元素
20
21
22
23 get(int index) 获取指定索引处的元素,并返回该元素
24
25 ArrayList是数组结构,元素查询快,增删慢
26
27 LinkedList是链表结构,元素查询慢,增删快
28
29 void addFirst(E e)将指定元素插入此列表的开头
30
31 void addList(E e)将指定元素插入此列表的末尾
32
33 E getFirst()返回此列表的第一个元素
34
35 E getLast()返回此列表的最后一个元素
36
37 E removeFirst() 移除并返回此列表的第一个元素
38
39 E removeLast() 移除并返回此列表的最后一个元素
40
41 E pop()从列表所表示的堆栈处弹出一个元素
42
43 void push(E e) 将元素推入此列表所表示的堆栈
44
45 boolean isEmpty()如果列表不包含元素,则返回true
46
47 */
48
49 public class listDemo{
50
51 public static void main(String[] args){
52
53 List<String> list = new ArrayList<String>();
54
55 list.add("张三“);
56
57 list.add("李四");
58
59 list.add("王五");
60
61 list.add(1 , "马五");
62
63 list.remove(2);
64
65 list.set(1,"马四");
66
67 for(int i = 0 ; i < list.size() ; i++){
68
69 String str = list.get(i);
70
71 System.out.println(str);
72
73 }
74
75 }
76
77 }
78
79
80
81 /*
82
83 Set接口:元素不可重复,通过元素的equals方法,来判断是否为重复元素
84
85 HashSet(实际上是一个HashMap集合),HashSet集合不能保证迭代顺序与元素存储顺序相同
86
87 HashSet采用哈希表结构存储数据,保证元素唯一性的方式依赖于hashCode()与equals()方法
88
89 HashSet中存储JavaAPI中提供的类型元素时,不需要重写元素的hashCode和equalsf方法,这两个方法已经在JavaAPI每个类中重写
90
91 HashSet中存储自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中对象的唯一
92
93 LinkedHashSet链表和哈希表组合的一个的数据存储结构,保证元素的存入和取出的顺序
94
95 */
96
97 public class SetDemo{
98
99 public static void main(String[] args){
100
101 HashSet<String> hs = new HashSet<String>();
102
103 hs.add("张三");
104
105 hs.add("李四");
106
107 Iterator it = set.iterator();
108
109 while(it.hasNext()){
110
111 Strign s = it.next();
112
113 System.out.println(s);
114
115 }
116
117 }
118
119 }
120
121 public class Student{
122
123 private String name;
124
125 private int age;
126
127 public Student(){
128
129 }
130
131 public Student(String name , int age){
132
133 super();
134
135 this.name = name;
136
137 this.age = age;
138
139 }
140
141 public void setName(String name){
142
143 this.name = name;
144
145 }
146
147 public String getName(){
148
149 return name;
150
151 }
152
153 public void setAge(int age){
154
155 this.age = age;
156
157 }
158
159 public int getAge(){
160
161 this.age = age;
162
163 }
164
165 @Override
166 public int hashCode() {
167 final int prime = 31;
168 int result = 1;
169 result = prime * result + age;
170 result = prime * result + ((name == null) ? 0 : name.hashCode());
171 return result;
172
173 }
174
175 @Override
176 public boolean equals(Object obj) {
177 if (this == obj)
178 return true;
179 if (obj == null)
180 return false;
181 if (getClass() != obj.getClass())
182 return false;
183 Student other = (Student) obj;
184 if (age != other.age)
185 return false;
186 if (name == null) {
187 if (other.name != null)
188 return false;
189 } else if (!name.equals(other.name))
190 return false;
191 return true;
192 }
193 @Override
194 public String toString() {
195 return "Student [name=" + name + ", age=" + age + "]";
196 }
197
198 }
199
200 public static void main(String[] args) {
201 HashSet<Student> hs = new HashSet<Student>();
202 hs.add(new Student("张三" , 20));
203 hs.add(new Student("李四" , 20));
204 hs.add(new Student("王五" , 20));
205
206 for(Student st : hs){
207
208 Syste.out.println(st.getName() +" "+ st.getAge());
209
210 }
211
212 /*
213
214 ArrayList : boolean contains(Object obj)如果此列表中包含指定的元素,则返回true
215
216 传入的元素的equals方法依次与集合中的旧元素比较,根据返回的布尔值判断是否有重复的元素,存放自定义类型时,由于自定义类型未重写equals方法,判断是否重复的依据是地址值,想判断内容是否有重复的元素,需要重写equals方法
217
218 HashSet : boolean add(E e)如果此set中没有包含指定元素,则添加指定元素
219
220 boolean contains(Object o) 如果此set中包含指定元素,则返回true
221
222 添加方法在添加时会判断是否有重复元素,有重复不添加,没重复则添加
223
224 由于是无序的,判断唯一的依据是元素类型的hashCode与equals方法的返回结果:
225
226 先判断新元素和集合中的旧元素的hashCode值:
227
228 如果不同,说明是不同元素,添加到集合
229
230 如果相同,再判断equals比较结果,返回true则相同元素,返回false则不同元素,添加到集合
231
232 存储自定义类型,如果没有重写该类的hashCode与equals方法时,则判断重复时,使用的是地址值,如果想通过内容比较元素是否相同,需要重写hashCode与equals方法
233
234 */