Java提供了集合类。集合类主要负责保存,盛装其他数据,因此集合类也称为容器类。所有的集合类都位于java.util包下。
Java的集合类主要有两个接口派生而出:Collection 和 Map,Collection 和 Map 是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
如图,Java所有集合分成三大类,其中
Set集合类似于一个罐子,添加时,Set无法记住元素的顺序。只能根据元素本身访问
List集合类似于数组,他可以记住添加元素的顺序,且List的长度可变。可以用索引访问
Map集合也像一个罐子,他里面的每项数据都是有两个值(Key - Value)组成。可以用Key访问
对于Set,List,Queue和Map四种集合,最常用的实现类是HashSet,TreeSet,ArrayDeque,LinkedList和HashMap,TreeMap等实现类。
Collection 和 Iterator 接口
Collection接口是List,Set和Queue接口的父接口。
Iterable接口新增了forEach 默认方法。可以使用Lmabda表达式来遍历集合元素。
Set集合
实际上Set就是Collection,只是行为略有不同
Set集合不允许包含相同的元素,如果视图把两个相同的元素放到同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。
HashSet类
Hashse是Set接口的典型实现,大多数时候使用Set集合时就是使用这个类实现。HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。
HashSet具有以下特点:
1不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。
2HashSet不是同步的,如果多个线程同时访问一个HashSet,假设有两个或者两个以上线程同时修改了HashSet集合时,则必须通过代码来保证其同步
3集合元素值可以是null
当向HashSet集合中存入一个元素时,会调用hashCode()方法来得到该对象的hashCode值,然后根据该hashCode值决定该对象在HashSet中的存储位置
HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值也相等。