Java集合框架是围绕一组标准接口设计的。Java集合框架主要包括两种类型的容器,一个是集合Collection,用来存储元素集合;另一个是图Map,用来存储key-value映射。
Collection
Collection的接口有三种子类型,List、Set和Queue。
再下面是一些抽象类,最后是具体实现类,常用的有ArrayList,LinkedList,HashSet,LinkedHashSet,HashMap,LinkedHashMap。
关系与区别
1. ArrayList与HashSet
- ArrayList有顺序,HashSet无顺序。
HashSet的具体顺序既不是按照插入顺序,也不是按照hashcode的顺序。同样的HashSet在不同版本下的JVM里也是不一样的。 - List的数据可以重复,Set的数据不能重复(HashSet其实就是实现了一个只有key的HashMap)
Set中数据重复的标准是:首先看hashcode是否相同,如果不同,则认为是不同数据;如果hashcode相同,再比较equals,如果equals相同则是相同数据,否则是不同数据。
2. ArrayList和LinkedList的区别
- ArrayList插入,删除数据慢(数据块存储,插入删除需要移动大面积数据);LinkedList插入,删除数据块(指针连接下一个数据,插入删除只要链接下一个位置就可以)
- ArrayList是顺序结构,定位很快;LinkedList是链表结构,定位慢。
3. HashMap与HashTable的区别
- HashMap和HashTable都实现了Map接口
- HashMap可以存放null(包括指针或值);HashTable不能存放null(指针不能是null,值也不能是null)
- HashMap不是线程安全的类;HashTable是线程安全的类
4. 几种Set:HashSet,LinkedHashSet,TreeSet (Set都是不重复的)
- 顺序性:HashSet无序;LinkedHashSet按照插入顺序;TreeSet从小到大排序