Java集合基础介绍

总体概述

  • LIst,Set,Map都是集合接口,LIst和Set继承于Collection接口,Map为独立接口
  • List的实现常用集合类实现有ArrayList,LinkedList,Vector
  • Set的实现常用集合类实现有HashSet,LinkedHashSet,TreeSet
  • Map的实现常用集合类有HashTable(父类是Dictionary),HashMap,LinkedHashMap,TreeMap
  • 其实Collection接口下还有个Queue接口

此图参考https://blog.csdn.net/zhangqunshuai/article/details/80660974
图片来自https://blog.csdn.net/zhangqunshuai/article/details/80660974

Collection接口特征说明与场景使用

  • List结合
    特点:有序,可重复存储
    ArryList:
    底层数据结构:数组
    优点:查询快,增删慢,效率高
    缺点: 线程非安全
    LinkedList:
    底层数据结构:链表
    优点:查询慢,增删快,效率高
    缺点: 线程非安全
    Vector:
    底层数据结构:数组
    优点:查询快,增删慢,效率低
    缺点: 线程安全
    面试常问:
    ArryList和Vector的区别:
    (1)同步性:Vector是线程安全的,即它的方法之间是线程同步的,而ArrayList是线程不安全的,它的方法之间是线程不安全的。如果只有一个线程访问集合,那就最好使用ArrayList,因为它是不同步的,效率更高;如果是多个线程访问集合,最好使用Vector,它是线程同步的,这样不用自己去实现同步。
    (2)数据增长:ArrayList和Vector都是由初始容量的,当存储量达到了这个初始容量值时,他们就会进行扩容,ArrayList是增长为原来的1.5倍,Vector是增长为原来的2倍(有兴趣去看下源码)
  • Set结合
    特点:无序,唯一
    HashSet:
    底层数据结构:Hash表(散列表)
    特点:无序,唯一
    通过hash()和equals()两个方法来保证唯一性
    LinkHashSet:
    底层数据结构:链表和Hash表
    特点:有序,唯一(先进先出FIFO)
    由链表保证有序,hash表保证唯一
    TreeSet:
    底层数据结构:红黑树
    特点:有序,唯一
    如何保证元素排序的呢?
    自然排序; 比较器排序
    如何保证元素唯一性的呢?
    根据比较的返回值是否是0来决定

Conllection集合使用场景

  • 数据不唯一(可重复)使用List
    • 安全性高,效率低用Vector
    • 安全性低,效率高用Array List
    • 查询多:ArrayList
    • 增删多:LinkedList
    • 如果你知道是List,但是不知道是哪个List,就用ArrayList。
  • 数据唯一(不能重复)使用Set
    • 排序: LinkedHashSet,TreeSet
    • 不排序:HashSet
    • 如果你知道是Set,但是不知道是哪个Set,就用HashSet。

Map接口特征说明与场景使用

图片参考https://blog.csdn.net/zhangqunshuai/article/details/80660974
图片来自:https://blog.csdn.net/zhangqunshuai/article/details/80660974

  • Map
    特点:双列存储,key不能重复,value可重复
    HashTable:
    底层数据结构:数组加链表
    特点:线程安全,无序
    HashMap:
    底层数据结构:数组加链表
    特点:线程非安全,无序
    LinkedHashMap:
    底层数据结构:hash表加链表
    特点:链表维持存入或者查询后的有序
    TreeMap:
    底层数据结构:红黑树
    特点:有序

Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。

  • TreeMap是有序的,HashMap和HashTable是无序的。
  • Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。

面试常问问题:
HashTable和HashMap的区别:

  1. Hashtable是线程安全的,HashMap不是线程安全的。 HashMap效率较高,Hashtable效率较低。
  2. 如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。
    查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有
    synchronized关键字,而HashMap的源码中则没有。
  3. Hashtable不允许null值,HashMap允许null值(key和value都允许)
  4. 父类不同:Hashtable的父类是Dictionary,HashMap的父类是AbstractMap
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值