集合容器概括有Collection和Map两大类
Collection下有List,Set;Map下有HashMap、HashTable、TreeMap
List下有ArrayList、LinkedList和Vector;Set下有HashSet、TreeSet;HashSet下有LinkedHashSet
List下的各种类都是可以重复的。ArrayList是基于数组实现的,特点查询速度快,增删慢。
查询快是因为数组的空间是连续的,查询时只要通过首地址和下标很快找到元素;增删慢是因为数组不能扩容的,
一旦增加或者删除元素,内部操作就会开辟一个数组把元素copy到新的数组,老的数组等待被垃圾回收。
LinkedList是基于双向链表的,相比于ArrayList的特点是查询慢,增删快。
查询慢是因为链表在内存中开辟的空间不一定是连续的,所以链表实现的方式是每个元素节点都会存放自己的地址、数据以及下一个节点的地址,
这样把所有的元素连接起来。所以当要查询元素的时只能一个一个地往下找,相比于数组的首地址加下标会慢上很多。
Vector也是基于数据实现的,相比于ArrayList是线程安全的,但是效率,性能低。
Set下各种实现类是不允许重复的。
HashSet是基于哈希表实现。其特点:不允许重复;允许null值,但是只能有一个;无序的,没有索引。
LinkedHashSet跟HashSet一样也是基于哈希表实现的。只不过,LinkedHashSet多了个链表,用来维护容器中
每个元素的顺序。其特点:不允许重复,只允许一个null值,有序的,没有索引。
TreeSet是SortedSet接口的唯一实现类,是基于二叉树实现的。TreeSet可以确保集合处于排序状态。
TreeSet支持两种排序方式,自然排序和定制排序,默认的是自然排序。
其特点是不允许重复,不允许null值,没有索引,也不包含索引操作的方法。
Map是双列集合的超类,也就是以键值对形式的类型。
HashMap和HashTable都实现了Map接口,但是两者是有区别的,主要区别在于:线程安全性,同步以及速度上。
HashMap是非线程安全的,可以接受null(key-value都可以为null);
HashTable是线程安全的,不可以接受null,可以多个线程共享一个HashTable;
HashTable由于是线程安全的,所以效率就比HashMap低,速度慢。
本文暂时没有评论,来添加一个吧(●'◡'●)