网上看见很多类似的关于集合的文章,但大多都是知其然不知其所以然,于是抽空总结了下,希望能够对想深入学习的朋友有所帮助。
在集合中最重要的2个接口是Collection和Map
[b]Collection[/b]
集合(序列)接口,存储有序和无序的序列
它是主接口,它的下面有几个重要的子接口List和Set
首先从接口的角度比较list和set的区别:
List:有序序列,里面有indexOf()方法来得到下标
Set没有该方法,也就是说它是无序的。
[b] List[/b]接口
它同样有3个重要的实现类ArrayList,Vector,LinkedList
ArrayList 在实现List等接口的基础上,多实现了RandomAccess接口,而该接口也就决定了ArrayList特有的属性,随即读取,速度非常的快,但是是非同步的。
Vector 跟ArrayList实现的接口完全一样,唯一的区别就是该类是同步的。
LinkedList 在实现List等接口的基础上,多实现了Deque,Queue接口(Deque extends Queue) ,而 Queue 有add(int index,E element) 等方法,也就决定了该实现类具备按照标记来快速的添加和删除数据,也是根本原因。
[b]Set[/b]接口
无序不重复序列 ,它缺少按照下标来取值的一些方法
它的重要实现类HashSet
该类实现set接口,有hash表(一个map实例)支持,也就是hashset是由hashmap产生的,只是它的key和value去掉只保留了Entry,非同步
[b]Map[/b]
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值
由Map.Entry<K,V> 嵌套类实现映射,该方法重写了hashcode,也就是说继承或实现该类的类的hashcode由其内容决定,与地址无关。
它的实现类也是2个经典的类HashMap.HashTable
这2个类在接口的继承上没有差异,属性也基本一样,就跟ArrayList跟Vector一样,
HashMap非同步,而HashTable是同步的。
我想大家如果能够了解到这些,就能够清晰的了解其用法,有时间可以看下他们的原码。
在集合中最重要的2个接口是Collection和Map
[b]Collection[/b]
集合(序列)接口,存储有序和无序的序列
它是主接口,它的下面有几个重要的子接口List和Set
首先从接口的角度比较list和set的区别:
List:有序序列,里面有indexOf()方法来得到下标
Set没有该方法,也就是说它是无序的。
[b] List[/b]接口
它同样有3个重要的实现类ArrayList,Vector,LinkedList
ArrayList 在实现List等接口的基础上,多实现了RandomAccess接口,而该接口也就决定了ArrayList特有的属性,随即读取,速度非常的快,但是是非同步的。
Vector 跟ArrayList实现的接口完全一样,唯一的区别就是该类是同步的。
LinkedList 在实现List等接口的基础上,多实现了Deque,Queue接口(Deque extends Queue) ,而 Queue 有add(int index,E element) 等方法,也就决定了该实现类具备按照标记来快速的添加和删除数据,也是根本原因。
[b]Set[/b]接口
无序不重复序列 ,它缺少按照下标来取值的一些方法
它的重要实现类HashSet
该类实现set接口,有hash表(一个map实例)支持,也就是hashset是由hashmap产生的,只是它的key和value去掉只保留了Entry,非同步
[b]Map[/b]
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值
由Map.Entry<K,V> 嵌套类实现映射,该方法重写了hashcode,也就是说继承或实现该类的类的hashcode由其内容决定,与地址无关。
它的实现类也是2个经典的类HashMap.HashTable
这2个类在接口的继承上没有差异,属性也基本一样,就跟ArrayList跟Vector一样,
HashMap非同步,而HashTable是同步的。
我想大家如果能够了解到这些,就能够清晰的了解其用法,有时间可以看下他们的原码。