版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337122
之前写过一篇文章《【J2SE快速进阶】——数组(及其内存分析 )》,在Java编程中,经常会用数组来装载数据,但是数组一个致命的缺点就是一旦初始化,就无法更改长度。
除了数组,Java还给我们提供了各种形式的容器,用来“盛放”数据。
Java提供的容器大致有两种,一种继承自Collection(如我们常用的List、Set),另一种继承自Map。
如上图,我们常用的Set和List两个接口作为“两大派别”都继承自Collection接口。这里说一下Set家族。
Set和List两者最大的区别是:Set中的内容是不能重复并且无序的;List中的内容是可以重复并且有序的。这里判断重复的条件是:往容器中添加对象时,如果新添的对象与容器中已有的某个对象equals,则重复,这时add()方法会返回false,否则返回true。(如果对equals不理解可以参考《【J2SE快速进阶】——Java中的equals和==的区别》)
比如:
List list=new ArrayList();
Set set=new HashSet();
list.add("hello");
set.add("hello");
System.out.println(list.add("hello"));//输出为true
System.out.println(set.add("hello"));//输出为false
Collection提供了如下方法:
方法名 | 返回类型 | 说明 |
---|---|---|
size() | int | 返回容器大小(所装对象个数) |
clear() | void | 清空容器 |
isEmpty() | boolean | 判断是否为空 |
contains(Object o) | boolean | 判断容器中是否包含指定对象 |
add(Object o) | boolean | 添加对象 |
remove(Object o) | boolean | 移除指定对象 |
iterator() | Iterator | 返回Iterator对象 |
containsAll(Collection c) | boolean | 判断容器中是否包含指定容器包含的所有对象 |
addAll(Collection c) | boolean | 添加指定容器包含的所有对象 |
removeAll(Collection c) | boolean | 移除指定容器中包含的所有对象 |
retainAll(Collection c) | boolean | 只保留指定容器中包含的对象 |
toArray([ T[] a ]) | Object[] | 返回包含容器中所有对象的数组 |
上述方法中,contains()、containsAll()、add()、addAll()、remove()、removeAll()这几个方法在执行的时候,判断对象是否存在、是否相等,都是依据equals方法来寻找、比较对象。因此可以根据需要来重写对象的equals方法,需要注意的是,重写对象equals方法的同时,也一定要重写hashCode方法。
后面陆续对Collection子接口及其实现类进一步探讨。
【 转载请注明出处——胡玉洋《Java基础——Collection接口》】