List、Set与Map
文章目录
1)List
2)Set
3)Map
概述
- 在写程序时不知道究竟需要多少对象,需要在控件不足时自动扩增容量,则需要使用容器类库
- Collection、List、Set、Map都是接口,不能实例化,继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。
- List和Set都继承至Collection接口,Map为独立接口
List
- 包括ArrayList,Vector,LinkedList
- 有序,可重复;List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
- ArrayList
- 底层是数组,查询快,增删慢,线程不安全,效率高
- Veator
- 底层是数组,查询快,增删慢,线程安全,效率低
- LinkedList
- 底层是链表,查询慢,增删快,线程不安全,效率高
- 知道是List,但是不知道是哪个List,就用ArrayList。
Set
- 包括HashSet、LinkedHashSet、TreeSet
- 无序,唯一,无法用下标来取得想要的值;检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
- HashSet
- 底层是哈希表,无序唯一,依赖hashCode()和equals()来保证元素唯一性
- LinkedHashSet
- 底层是链表和哈希表,有序唯一,由链表保证有序,由哈希表保证唯一
- TreeSet
- 底层是红黑树,有序唯一,自然排序和比较器排序保证元素排序,根据比较的返回值是否为0来保证元素的唯一性
- 知道是Set,但是不知道是哪个Set,就用HashSet。
Map
- 包括HashMap、LinkedHashMap、TreeMap、HashTable
- 适合存储键值对的数据
- HashMap
- 底层是哈希表,非线程安全
- 无序的,方法不是同步的,不是线程安全,效率较高,允许null值。
- HashTable
- 无序的,方法是同步,线程安全,效率较低,不允许有null值。
- TreeMap
- 底层是红黑树,非线程安全
- 有序的,主要用于排序,可以自定义排序规则
- LinkedHashSet
- 主要保证有序的集合
- java中String数组和List的互相转化
参考
java中Map,List与Set的区别
java 常用集合list与Set、Map区别及适用场景总结
Java集合中List,Set以及Map等集合体系详解