什么是集合呢? 集合描述的是一组对象,在集合里面的对象也被叫做element。它允许有重复的元素存在。
它在集合的等级机构中处于最顶层 位置。它是一个接口,它的具体的实现类必须实现2个标准的构造方法。
- 无参构造方法:用于创建一个空的集合
- 具有一个参数,这个参数的类型是Collection: 它的作用是可以创建一个具有和这个参数一样的元素的集合。它可以复制一个集合。
但是,要注意的是它不是一个必须遵守的规定,正如接口不能具有构造方法一样。但是Java平台的类库都是遵守了这条规定的。
当我们用迭代器来操作集合的时候或者当一个集合作为一个方法的参数的时候,需要考虑到这个集合的同步策略。
Collection继承了Iterable接口。在Collection接口里面有下面几类操作
- 访问的操作:如size(),isEmpty(),contains(Object o),iterator(),toArray()等
- 修改的操作:如add(E e),remove(Object o)
- 批量的操作:如containsAll(Collection<?> c),addAll(Collection<? extends E> c),removeAll(Collection<?> c),default boolean removeIf(Predicate<? super E> filter),retainAll(Collection<?> c)
- 比较的操作:equals(Object o),stream()
其中retailAll方法的作用是在一个集合在和指定的集合做元素上的差异的时候,删除与指定的集合中不包含的元素。
ArrayLista = new ArrayList<>();a.add(1);a.add(2);a.add(3);ArrayList b = new ArrayList<>();b.add(1);b.add(2);b.add(5);boolean res = a.retainAll(b);a.forEach(System.out::println);//return 1 2复制代码
removeIf是根据传入的条件来删除集合中满足这个条件的所有元素。
ArrayListnames = new ArrayList<>();names.add("xiaoa");names.add("hehe");names.add("kaxi");names.add("xikaxi");names.removeIf(name -> name.startsWith("xi"));names.forEach(System.out::println);//return hehe kaxi复制代码
这个方法是利用集合的迭代器来进行删除的,所以如果你操作的集合的迭代器不支持删除的操作,就会出现UnsupportedOperationException。
集合是一种使用比较多的数据结构,比如Spring框架的许多地方都在大量使用集合。可以说集合是构建复杂程序的基础材料。要理解这类框架就需要对集合这个家族的成员有着更加深入的认知。这是学习集合的第一篇。后面会持续跟大家分享这一块的内容。