集合的体系
Collection的结构体系
- List系列集合:添加的元素是
有序的、可重复、有索引
。- Set系列集合:无序、不重复、无索引
- HashSet:无序、不重复、无索引
- LinkedHashSet:
有序
、不重复、无索引- TreeSet:
按照大小默认升序排序
、不重复、无索引
Collection常见API
Collection<String> collection = new ArrayList<>();
// 添加元素
boolean add = collection.add("Java");
collection.add("Python");
System.out.println(collection);
// 删除元素 remove 如果集合中有多个相同元素,只会删除第一个
boolean remove = collection.remove("Java");
System.out.println(collection);
// 判断是否包含指定元素
boolean contains = collection.contains("Python");
System.out.println(contains);
// 大小
int size = collection.size();
System.out.println(size);
// 清空
collection.clear();
System.out.println(collection);
// 判断是否为空
boolean empty = collection.isEmpty();
System.out.println(empty);
// 集合转换为数组
Object[] objects = collection.toArray();
System.out.println(Arrays.toString(objects));
// 将一个集合添加到另一个集合
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
ArrayList<String> list2 = new ArrayList<>();
list2.add("Java");
list2.add("Python");
list2.add("C++");
list.addAll(list2);
System.out.println(list);
遍历-迭代器
迭代器:遍历集合的专用方式,Java中迭代器的代表就是Iterator
迭代器取元素之前一定要判断还有没有元素
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
// 获取迭代器对象
Iterator<String> iterator = list.iterator();
// 如果有下一个元素
while (iterator.hasNext()) {
// 获取下一个元素
String next = iterator.next();
System.out.println(next);
}
遍历-增强for循环
- 增强for循环就是
迭代器的简便写法
for (String s : list) {
System.out.println(s);
}
遍历-forEach
Collection.
forEach
(Consumer<? super E> action) 这个方法集成于Iterable
接口
// Collection.forEach(Consumer<? super E> action) 这个方法集成于Iterable接口
list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
// 使用lambda表达式
list.forEach(s -> System.out.println(s));
// 前后参数一样的话使用方法引用
list.forEach(System.out::println);
集合存储对象的原理图
遍历删除可能出现异常
- 解决方法:
- 使用for循环正向删除,每次删除,i–
- for循环逆向删除,从后向前删除
- 使用迭代器删除的时候,不要使用集合的remove方法,使用迭代器的remove方法