之前写过一篇文章《【J2SE快速进阶】——数组(及其内存分析 )》,在Java编程中,经常会用数组来装载数据,但是数组一个致命的缺点就是一旦初始化,就无法更改长度。
除了数组,Java还给我们提供了各种形式的容器,用来“盛放”数据。
Java提供的容器大致有两种,一种继承自Collection(如我们常用的List、Set),另一种继承自Map。
![这里写图片描述](https://ucc.alicdn.com/images/user-upload-01/img_convert/8a8270d6af6c7f61d5ad008310dc1176.png)
如上图,我们常用的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提供了如下方法:
上述方法中,contains()、containsAll()、add()、addAll()、remove()、removeAll()这几个方法在执行的时候,判断对象是否存在、是否相等,都是依据equals方法来寻找、比较对象。因此可以根据需要来重写对象的equals方法,需要注意的是,重写对象equals方法的同时,也一定要重写hashCode方法。
后面陆续对Collection子接口及其实现类进一步探讨。