集合框架---Map Set List初步理解

本文详细阐述了Java中集合框架的各个组件,包括Map、HashMap、LinkedHashMap、Set、HashSet、LinkedHashSet、List、ArrayList、Vector、LinkedList等,以及它们各自的特点、应用场景和内部实现原理。同时介绍了如何在实际开发中合理选择和使用这些集合类。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值