Java容器

Halona ·
更新时间:2024-11-15
· 718 次阅读

Java容器

有两种容器:一个是Collection容器,存放对象的集合;另一种是Map容器,存放键值对(Key-value)集合

Collection容器

在这里插入图片描述
从图上我们可以看到Collection接口下有三个儿子,分别是Set,List,Queue;下面我来逐个介绍。

Set

Set集合看重的是独一无二,就是没有重复的值。

HashSet:基于哈希表实现,支持快速查找,但是不支持有序,就是插入的数据遍历出来是无序的。 LinkedHashSet:具有HashSet查找效率,同时前后链维持数据的插入顺序。 TreeSet:基于红黑树实现,支持有序性操作。 List

List集合看重的是有序,同时值可以重复。

ArrayList:底层是数组,能够动态增大位置,支持随机查找,但是插入和删除效率低。 Vector:底层是数组,和ArrayList相似,不同是线程安全。 LinkedList:底层是链表,双相链表所以不支持随机查找,支持顺序查找,插入和删除效率比ArrayList要高。从图上看到,它也也是Queue的儿子,所以他也可以实现双向队列 Map容器

在这里插入图片描述

HashMap:基于哈希表 HashTable:基于哈希表,线程安全 TreeMap:基于红黑树实现 List Set Map 区别

List:可以添加重复的值,遍历有序。
Set:不可以添加重复的值,插入是无序的。
Map:键值对存储,值可以重复,键不可以重复。

ArrayList和Vector区别

Vector是线程安全,但是因为每一步都是同步的,时间花销非常大。

HashMap和HashTable区别 线程安全:HashTable 是线程安全,HashMap是非线程安全。Hash Table内部的方法都有synchronized修饰,如果要用HashMap又想线程安全,就使用ConcurrentHashMap; 效率:俗话讲,有得有失,既然线程安全了,那么效率就会比HashMap要低,基本上我工作时不会用HashTable。 对Null的支持:HashMap对键和值都支持为NUll,Hash Table不支持键为Null。 底层数据结构:HashMap在JDK1.7和1.8之间变化较大在1.8之后,当链表长度大于8时,链表转化为红黑树,但HashTable没有变化。 ArrayList 和 LinkedList 区别 线程安全:两者都是不同步的,不能保证线程安全 底层数据结构:ArrayList底层用的是数组,LinkedList底层使用的是双向链表 是否支持快速随机访问:ArrayList实现了RandomAccess接口,这个接口并没有任何代码,这只是一个标识而已,LinkedList没有实现这个接口,不支持高效的随机元素访问。 HashSet如何知道重复

靠两个方法:hashCode() 和 equals() 。调用hashCode判断对象放入的位置,如果当前位置有值,equals判断这两个值是否相等

hashCode() 和 equals() 两个对象hashCode值相同,不一定相等 两个对象相等,hashCode也相同 两个对象相等,equal返回true
作者:唏嘘嘅猪肉佬



JAVA java容器

需要 登录 后方可回复, 如果你还没有账号请 注册新账号