集合类被分为两种,一种是Collection,另一种是Map。
1.Collection
一个独立元素的序列,这些元素都服从一条或者多条规则。他下面有三个接口继承这个这个接口。分别是list、set、queue。
List:必须按照插入的顺序保存元素
Set:不能有重复的元素
Queue:按照排队规则来确定对象产生的顺序(通常与他们被插入的顺序一样)。
List常被实现类:ArrayList、LinkedList、Vector。下面说下这三个的区别。
ArrayList是基于数组实现的集合类,所以对于数组的删除操作来说效率底下,要通过移动数组位置,重新定位来换取一个值的删除。但是对于查询来说速度就非常的快了,只需要知道要查找那个坐标位就能找到我要查到的值。
LinkenList是基于链表实现的集合类,所以对于他来说查询一个值,要通过一步步的遍历,达到我要查询的位置,才能获取到想要的值,而如果用来做删除、添加操作时,就方便多了,因为他只要获取到前一个元素和后一个元素就行。
vector是同步的,所以线程安全。
List的实现类是AbstractList。上面三个都是继承与该类。
Set常被实现类:HashSet,TreeSet
set为什么能实现去重添加?
是因为hashset的存储是通过hashMap实现的,所以在往hashset中添加元素时,会去计算hashcode的值,这里就涉及到equals和hashcode的条款了。
1.如果两个对象equals比较相等,则一定会产生一样的hashcode值。
2.如果两个对象的hashcode值相等,equals也不一定相等。
所以在添加相同的对象时,不能重复添加。
HashSet和TreeSet的区别?
1.HastSet是通过hashMap实现的,而TreeSet是通过TreeMap实现的,只不过都是用的Map的key。
2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.
3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.
b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象
每一个对象
才可以真正定位到键值对应的Entry.
c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value
4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.
a. Comparator可以在创建TreeMap时指定
b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.
c. TreeMap是使用Tree数据结构实现的,所以使用compare接口就可以完成定位了.
2.Map
map常被继承类HashMap、Hashtable、TreeMap、LinkedHashMap。接下来就说下这四个继承类的区别。
继承类 |
是否允许空的key,value |
是否允许key,value为null |
是否同步 |
是否排序 |
HashMap |
是 |
是 |
否 |
否 |
Hashtable |
是 |
否 |
是 |
否 |
TreeMap |
是 |
否 |
否 |
是 |
LinkedHashMap |
是 |
否 |
否 |
否 |
3.集合的操作类
需要指出的是集合中含有两个集合的操作类,分别是Collections和Arrays。这两个类中集成了对集合类众多动作的操作,包括排序、反转、截取等方法。需要注明的是这两个是使用类,不是集合类的接口,而是对集合类的操作,所以不要跟Collection集合类接口混淆。
根据开始给出的集合类状态图我做出了一个简单的图标归纳。
类 |
实现接口类 |
继承接 口类 |
实现方式 |
是否可重复 |
是否同步 |
是否排序 |
ArrayList |
List |
Collection |
数组 |
是 |
否 |
否 |
LinkedList |
链表 |
是 |
否 |
否 |
||
Vector |
|
是 |
是 |
否 |
||
HashSet |
Set |
hashMap |
否 |
否 |
否 |
|
TreeSet |
treeMap |
否 |
否 |
是 |
||
Hashtable |
Map |
Map |
Key,value |
否 |
是 |
否 |
HashMap |
Key,value |
否 |
否 |
否 |
||
TreeMap |
Key,value |
否 |
否 |
是 |
||
LinkedHashMap |
Key,value |
否 |
否 |
否 |
相关推荐
java集合分类总结.doc
今天在网上搜索了一下,发现一篇关于java集合的博文,里面整理得非常好, 特意copy过来和大家分享一下
Java集合类包下的多个集合类是我们项目开发中常用的类,由于存在大量的方法,若没有一个清晰的总结框图,很难灵活使用,通过该总结,你会发再其实该包下的接口并非我们想象的那么复杂...
JAVA集合类总结[整理].pdf
总结Java标准类库的容器类; 容器类库是你每天都会用到的工具,它能使程序更简介,更强大并且更搞笑。
java的各种集合类的总结,以及实例讲解。
Java中集合类用法总结Java中集合类用法总结.pdf
java集合类面试题总结
java集合类知识总结--思维导图文件xmind xmind文件类型 总结了java常用集合相关问题 包括map、set、list、数组等
对java集合类的总结。 包括性能,类图。
Java集合详解,详细讲解java的集合类,对java集合类的最详细的讲解。我自己的总结,保证大家看了很有收获
JAVA集合类用法总结 概括了 java 的所有集合的用法 MAP SET List 等
Java集合类总结 Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:Iterator,fail-fast机制与比较器 Java集合详解4:HashMap和HashTable Java...
java集合类HashMap总结共7页.pdf.zip
Java集合类总结 Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解:Queue和LinkedList Java集合详解:迭代器,快速失败机制与比较器 Java集合详解:HashMap和HashTable Java集合详解...
JAVA集合类的一些总结 collection,vector,arraylist,list,hashtable...
java集合类ArrayList总结共9页.pdf.zip
对java集合类的部分总结,希望对大家有用,呵呵
java集合 java集合思维导图 java集合总结
JAVA中集合类的总结