博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
集合框架---Map Set List初步理解
阅读量:6164 次
发布时间:2019-06-21

本文共 1165 字,大约阅读时间需要 3 分钟。

hot3.png

Map------------------key/value键值对

HashMap : 实现了hash算法。底层是一个数组Entry<K,V>[] table, 这个table每个位置存放一个Entry,每个Entry相当于一个桶,通过hash算法特定的数据会放到一个桶内。取值时,通过hash算法得到对象存放的位置,即数组的下标,然后再从这个桶内循环查找,直到找到与key相同的值。
LinkedHashMap :继承于hashmap,与hashmap的存取方式是一样的。但是linkedhashmap的Entry类额外增加了两个字段
Entry<K,V> before , after ;一个头结点
private 
transient Entry<K,V> header;
用header当头结点,结合before和after属性形成一个环形双向链表。每当加入一个key/value到集合中时,会把这个对象放到链表中的最前端(header的after端)。当循环集合时从链表的最后端(header的before端)开始遍历,这样遍历出来的结果就保证了是按插入的顺序遍历的。
TreeMap : 实现的是红黑树算法。按照排序二叉树的规则添加对象节点,按照红黑树的规则修正二叉树的高度使根节点两边的高度能达到平衡。TreeMap遍历出来的对象是排好序的。

Set------------------ 是没有重复对象的集合。

HashSet: 持有一个HashMap的临时对象,用HashMap的key当做对象存储,所有的value值都是同样的一个不变的对象。HashSet是通过HashMap的key不能重复来保证没有重复的对象。
LinkedHashSet:继承于
HashSet,但持有的是一个LinkedHashMap对象。保证没有重复对象的同时也保证了能按插入顺序取出集合中的对象。
TreeSet
持有一个TreeMap对象。保证没有重复对象的同时,也保证了能按一定的排序取出集合中的对象。

List------------------位置性集合。加进清单的元素可以加在清单中特定位置或加到末尾

ArrayList : 底层是一个数组对象,通过一定的规则来扩容。插入和删除比较耗性能,每次插入或删除一个对象都会导致很多对象的移动。但是取对象速度很快。

Vector:
与ArrayList相差不大,只是vector是线程安全的。

LinkedList : 用内部内Node<E>对象形成一个双向链表,有头指针first和尾指针last。插入或删除只需要改变引用的节点所以速度很快。但是查找速度很慢,需要一个个节点的遍历。

转载于:https://my.oschina.net/u/1583086/blog/330476

你可能感兴趣的文章
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
centos64i386下apache 403没有权限访问。
查看>>
jquery用法大全
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>