Java 集合Collection

时间:2024-04-13 11:41:04

集合的体系

在这里插入图片描述

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方法