【数据结构篇一】Java集合框架下List、Set、Map的认识

List

一、LinkList:是List接口的一种实现,基于链表的数据结构,地址不连续,查询和删除比较快,线程非安全
二、ArrayList:List接口的一种实现,基于动态数组的数据结构,地址连续,查询效率高,线程非安全
三、Vector:与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,是线程安全的。(即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。)
常用方法

方法解释
boolen add(E e)尾插e

Set

一、TreeSet:底层是红黑树,且元素自动排序,靠自然排序比较器保证有序。根据比较的返回值是否是0来保证元素的唯一性,不允许放入null值 。适用于排序场景
二、HashSet:底层是哈希表,不允许有重复的值,存储数据时会调用HashCode方法,得到Hash值,以此决定值的存放位置。
线程非安全:即使存储的值相同,但是Hash值不同,依旧会存放在不同的位置。
唯一性:元素重写hashCode方法和equals方法来判断两个元素是否相等,如果相等则覆盖原来的元素
三、LinkedHashSet 链表维护元素的插入顺序,底层采用链表和哈希表,链表保证元素顺序和存储顺序一致,哈希表保证元素的唯一性。线程不安全。

Map

一、HashMap:基于Hash桶,通过hash函数计算Hash地址,需要复写equals和hashcode方法,线程非安全,适用于Map中插入,删除和定位元素。

在JDK1.7及之前,是用数组加链表的方式存储的。当链表的长度特别长的时候,查询效率将直线下降,查询的时间复杂度为 O(n)。
JDK1.8 把它设计为达到一个特定的阈值(当一个hash值上的链表长度大于8时)之后,就将链表转化为红黑树。

这里简单说下红黑树的特点:

  • 每个节点只有两种颜色:红色或者黑色
  • 根节点必须是黑色
  • 每个叶子节点(NIL)都是黑色的空节点
  • 从根节点到叶子节点,不能出现两个连续的红色节点
  • 从任一节点出发,到它下边的子节点的路径包含的黑色节点数目都相同
  • 由于红黑树,是一个自平衡的二叉搜索树,因此可以使查询的时间复杂度降为O(logn)。

hash冲突的解决方法
开放定址法(查询产生冲突的地址的下一个地址是否被占用,直到寻找到空的地址),再散列法,链地址法等。hashmap采用的就是链地址法,jdk1.7中,当冲突时,在冲突的地址上生成一个链表,将冲突的元素的key,通过equals进行比较,相同即覆盖,不同则添加到链表上,此时如果链表过长,效率就会大大降低,查找和添加操作的时间复杂度都为O(n);但是在jdk1.8中如果链表长度大于8,链表就会转化为红黑树,时间复杂度也降为了O(logn),性能得到了很大的优化。

PUT方法
在这里插入图片描述

二、TreeMap:基于红黑树实现,适用于按自然顺序或自定义顺序遍历键(key),线程非安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值