第一篇博客中提到了集合中的两组接口,Collection 和 Map,它们有各自的特色,以便让开发者在编写代码有最合适的选择。从本篇开始,将逐一学习Collection接口及其子接口和实现类。java
Collection 接口是一个根部接口,以Collection 为父接口的这一组接口所存储的是一组对象,也可称做一组元素。那这些元素是否有序,是否容许重复,各类操做有无特殊性?根据这些问题,咱们很容易理解为何有子接口 List、Set和Queue了。
api
更多信息,查阅 JDK 官方文档。
数组
一、int size()oracle
这个方法在循环列表时常用,它获得集合中的对象个数,集合中元素个数>Integer.MAX_VALUE时,则返回Integer.MAX_VALUE。工具
二、boolean isEmpty()
学习
判断集合中是否包含对象,很少说。
url
三、boolean contains(Object o)
spa
判断集合中是否包含指定的对象。.net
#当指定对象为null时,若是集合中至少有一个对象为null,那么调用此方法返回true;code
#当指定对象不为空时,若是有对象 e 知足 o.equals(e),那么调用此方法将返回true。
#当指定对象为null,而调用该方法的集合对象不容许null元素存在时,则会抛出NullPointerException异常。
四、Iterator<E> iterator
此方法从Iterable接口中继承而来,返回的是在此集合上进行迭代的迭代器。因为Collection接口并不肯定元素是否有序,即便有序,也没法肯定是以何种方式排序,因此迭代的顺序不可预知。
五、Object[] toArray()
此方法将一组对象元素的存储方式转换成了数组,利用数组来管理这组对象。由迭代器方法 iterator 返回的对象顺序,也将做用到此方法。
另外,调用此方法返回的数组能够任意修改而不会对原集合形成任何影响。
此方法充当了基于数组的 API 和基于Collection 的 API 之间的桥梁
六、<T> T[] toArray(T[] a)
把集合存储到指定的数组 a 中,但若是 a 的容量不够了,那么将创建一个与 a 数组有相同运行时类型的新数组用来存储集合中的元素。
// 声明一个List List<String> list = new ArrayList<String>(); // 添加元素 list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); // 新建数组 String[] strArr = new String[5]; // 调用toArray(T[] a)方法 list.toArray(strArr); // 输出数组 System.out.println("旧数组:"); for(String str : strArr) { System.out.println(str); } // 输出新数组 System.out.println("新数组:"); for(String str : newStrArr) { System.out.println(str); }
结果以下: 旧数组: null null null null null 新数组: 1 2 3 4 5 6
能够看到,strArr 的容量并不够容纳下集合元素,strArr不能胜任这份工做,toArray方法返回一个新的数组。下面将数组的容量增到到足以容纳下集合元素个数。
// 将数组的容量扩大,并初始化数组的一个元素 String[] strArr = new String[7]; strArr[0] = "IAmHere";
结果以下: 1 2 3 4 5 6 null
可见,调用此方法会忽略掉初始化的数组元素,进而抢占数组,即便抢占后数组还有剩余容量,也不会分配给初始元素。
七、boolean add(E e)
向集合中添加指定元素 e。
返回true的状况:
(1)集合中没有此元素,集合容许添加指定类型 E;
(2)集合中由此元素,但容许有重复元素;
返回false的状况:集合不容许有重复元素,集合中有此元素。
八、boolean remove(Object o)
若是集合中有指定元素 o,则将 o 移除,并返回true,不然返回false。
九、boolean containsAll(Collection<?> c)
集合中包含集合 c 中的全部元素,则返回true。以为苛刻吗?
十、boolean addAll(Collection<? extends E> c)
将指定集合 c 中的全部元素都添加到此集合中,集合若所以调用发生变化,则返回true。
有趣的是,本身添加本身会发生什么呢?咱们来看看:
// 声明一个List List<String> list = new ArrayList<String>(); // 添加元素 list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); // 添加本身 list.addAll(list); // 输出 for(String str : list) { System.out.println(str); }
结果: 1 2 3 4 5 6 1 2 3 4 5 6
合理吗?官方文档说这种调用的行为是不肯定的,那么咱们最好别这么干!
十一、boolean removeAll(Collection<?> c)
移除集合中那些也包含在指定集合 c 中的全部元素,若所以调用致使集合发生改变,则返回true。此调用移除的是两个集合的交集。
十二、boolean retainAll(Collection<?> c)
移除集合中那些不包含在指定集合 c 中的全部元素,若所以调用致使集合发生改变,则返回true。此调用保留的是两个集合的交集。
1三、void clear()
移除集合中的全部元素。
1四、boolean equals(Object o)
比较集合和指定对象 o 是否相等。
1五、int hashCode()
返回集合的哈希码值。(该学习下哈希码值了。)
Collection是接口,它提供了上述方法。而Collections是一个工具类,它包含专门操做集合的静态方法,如排序、拷贝、匹配查找等等。更多关于Collections类的方法将在之后的博客中作介绍。