1. List 接口
- ArrayList 基于数组结构实现,查询快、增删慢,线程不安全
- Vector 基于数组结构实现,查询快、增删慢,线程安全
- LinkedList 基于链表结构实现,增删快、查询慢
1.1 ArrayList
- ArrayList 基于数组实现,是一个动态数组,其容量能自动增长
- 拥有连续的内存空间
public class ArrayList extends AbstractList
implements List, RandomAccess, Cloneable, java.io.Serializable {
}
Serializable 接口,支持序列化
RandomAccess 接口,支持快速随机访问
Cloneable 接口,能被克隆
2. Set 接口
特点:无序、无下标、元素不可重复
2.1 HashSet
- 存储结构:哈希表
- 基于 HashCode 实现元素不重复
- 当存入元素的哈希码相同时,会调用 equals 进行确认,若结果为 true, 则拒绝后者存入
2.2 TreeSet
- 基于排列顺序实现元素不重复
3. 集合操作
3.1 遍历
- for 循环
- forEach (本质是通过 Iterator 遍历的)
- while
- 流式遍历 (Java8)
@Test
public void iterator() {
List list = Arrays.asList("111", "222", "333");
ListIterator iterator = list.listIterator();
while (iterator.hasNext()) {
System.out.println("index:" + iterator.nextIndex() + "; element: " + iterator.next());
}
while (iterator.hasPrevious()) {
System.out.println("previousIndex:" + iterator.previousIndex() + "; element:" + iterator.previous());
}
}
@Test
public void subList() {
List list = Arrays.asList("111", "222", "333", "444");
List subList = list.subList(1, 3);
// subList: [222, 333]
}
3.2 remove() VS removeAll()
@Test
public void test() {
List all = new ArrayList();
List little = new ArrayList();
// List' may not contain objects of type 'List'
all.remove(little);
// 更正
all.removeAll(little);
}
3.3 remove()
List 删除元素时,建议使用 Iterator 接口迭代删除 List 元素
@Test
public void remove() {
List list = new ArrayList();
list.add("111");
list.add("222");
// for (String str : list) {
// if ("222".equals(str)) {
// // 报错:java.util.ConcurrentModificationException
// list.remove(str);
// }
// }
// 更正
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if ("222".equals(item)) {
iterator.remove();
}
}
System.out.println(list);
}
3.4 自定义移除元素
重写 equals(..) 方法
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Parent {
private String name;
private Integer age;
private String job;
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (obj instanceof Parent) {
Parent parent = (Parent) obj;
// 自定义逻辑
return this.name.equals(parent.name) && this.age.equals(parent.age);
}
return false;
}
}
@Test
public void customRemove() {
List list = Lists.newArrayList(new Parent("aaa", 15, "Java"),
new Parent("bbb", 20, "C"));
Parent parent = new Parent("bbb", 20, "C++");
list.add(parent);
// 会调用equals(..)
// Removes the first occurrence of the specified element from this list
list.remove(parent);
// Removes from this list all of its elements
list.removeAll(Arrays.asList(parent));
}
【信息由网络或者个人提供,如有涉及版权请联系COOY资源网邮箱处理】
© 版权声明
部分内容为互联网分享,若有侵权请联系站长删除。
THE END
暂无评论内容