Java List Map Set 常用结构比较

Java LIST MAP SET下各类结构比较

java集合工具,说白了,就是一堆别人已经写好的工具结构,你再根据特定的场景选择不同的结构来处理数据。其实里边的坑很多,Java的工具类型换过几代,而为了向下兼容便保留了之前的结构,实际生产使用的时候其实场景相对比较单一,很难全部在生产上全部都用过,久而久之就把知识交还给国家了。。。。。。然后偏偏很多技术面试都会挑这些边边角角来考验你学的是否瓷实,今天会将几种结构关键点比较整理成表,方便比较。

首先来看类的逻辑拓扑:

(图片转载,原博是谁的已经不清楚了)
整体上分成两大块,一个是collection接口下的List和Set,一个是Map,其中,set接口下的所有实现基本都是基于Map的实现进行的封装,一般是把Map中的key做存储坑位。

常用的几种结构:

List接口下:
  1. ArrayList:可以去GC上看源码,实现上就是object数组片段不断地叠加,查找的时候很快,一旦涉及到元素增加或删除就比较麻烦,需要依次移位再拼接。
  2. LinkedList:就是一个链表,便利麻烦,增删操作简单,找块空间改下指针就行了
  3. Vector:第一代的结构遗腹子,实现上也是一个线性表,唯一的特性就是实现好了线程锁,但是目前在工具Collections中已经包含加锁工具,比较鸡肋
  4. Stack:集成于vector,实现了栈的基本规则LIFO
Map接口:
  1. HashMap:k-v形式的数据存储,使用散列表的方式来控制碰撞问题,存储时他会对key进行哈希,并通过一个数组来存储键值匹配关系,哈希后和数组总长进行按位相与&,定位到实际位置,如果发生碰撞会查散列表(链表形式实现)。因为要按位与,所以数组扩容时必须以2的N次右移为单位。扩容触发条件为容量的75%已经被使用
  2. HashTable:和hashMap的区别就是它实现了同步机制,默认大小为11个,它的定位方法会和数组的长度进行取余%操作,而且枚举用的是Enumeration。
  3. TreeMap:他是基于红黑树实现的排序的K-V数据组,使用时必须实现comparable来实现对key的比较。
Set接口:
  1. HashSet:基于hashmap实现,把key作为关键值存储
  2. TreeSet:基于TreeMap,实现了排序功能,增删操作复杂度为O(log n),优于线性表
有问题纰漏欢迎留言补充~~~~~~~
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值