Java容器

Java容器

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

Collection容器

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

Set

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

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

List

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

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

Map容器

在这里插入图片描述

  • HashMap:基于哈希表
  • HashTable:基于哈希表,线程安全
  • TreeMap:基于红黑树实现

List Set Map 区别

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

ArrayList和Vector区别

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

HashMap和HashTable区别

  1. 线程安全:HashTable 是线程安全,HashMap是非线程安全。Hash Table内部的方法都有synchronized修饰,如果要用HashMap又想线程安全,就使用ConcurrentHashMap;
  2. 效率:俗话讲,有得有失,既然线程安全了,那么效率就会比HashMap要低,基本上我工作时不会用HashTable。
  3. 对Null的支持:HashMap对键和值都支持为NUll,Hash Table不支持键为Null。
  4. 底层数据结构:HashMap在JDK1.7和1.8之间变化较大在1.8之后,当链表长度大于8时,链表转化为红黑树,但HashTable没有变化。

ArrayList 和 LinkedList 区别

  1. 线程安全:两者都是不同步的,不能保证线程安全
  2. 底层数据结构:ArrayList底层用的是数组,LinkedList底层使用的是双向链表
  3. 是否支持快速随机访问:ArrayList实现了RandomAccess接口,这个接口并没有任何代码,这只是一个标识而已,LinkedList没有实现这个接口,不支持高效的随机元素访问。

HashSet如何知道重复

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

hashCode() 和 equals()

  • 两个对象hashCode值相同,不一定相等
  • 两个对象相等,hashCode也相同
  • 两个对象相等,equal返回true
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值