深入理解Java之《突破程序员基本功》之类集框架 ---------读书笔记------持续更新

1、Set和Map之间有莫大的联系

a、通过Map的Set<K>keySet()方法可以返回由所有key组成的Set集合,换一种思路,如果把Map集合中的value当成key的附属物,我们完全可以自己手动完成一个Map

b、HashSet采用Hash算法决定元素储存的位置,对于HashMap系统将value当做key的附属value跟随key储存

c、对于每个java集合而言,其本质上并没有储存真的java对象,它只是多个引用的集合

d、ArrayList的底层是基于数组实现的,每次创建ArrayList传入的int就是其包含的数组的长度,如果创建时没有传入Int值则默认为10个长度

e、当程序试图将一个key—value放入hashmap中时,首先会根据key的hashcode值决定对应的Entry的存储位置,如果两个Entry的

key的hashcode返回值相同则存储相同的位置,如果两个Entry的key通过equals比较返回true,新添加的将覆盖原来的Entry的value

,但key不会覆盖,若果equals返回false则新添加的Entry将与原有Entry形成Entry链,新添加的Entry位于链的头部

f、创建hashmap时指定的initialCapacity并不等于hashmap的实际容量,其实际容量比initialCapacity大,除非指定的initialCapacity恰好是2的n次方

,知道这个可以将initialCapacity参数值初始化的时候指定为2的n次方以减少计算开销

g、hashmap将key-value当成一个整体进行处理,这个整体就是一个entry对象,其底层采用一个Entry【】数组

保存所有的key-value,hashmap的get和put操作都需要用到查询,减少负载因子会提高hashmap的查询性能,但会降低hash表的内存空间

,如果程序内存紧张,可以适当增加负载因子,如果程序比较关心时间开销,可以适当减少负载因子,通常情况无需改变负载因子

h、hashset是基于hashmap实现的,其底层采用hashmap来保存所有元素,它是封装了一个hashmap对象来存储所有的集合元素,

所有放入hashset的元素实际上有hashmap的key来保存,而该hashmap的value保存了一个PRESENT

它是一个静态的Object对象

i、hashset的add方法实际为调用hashmap的put方法,如果新添加的entry与集合原有key相同,即hashcode相等通过equals也等,

那么新添加的entry将覆盖原来的entry的value,但key不会改变,因此hashset中添加一个存在的元素,新的元素不会覆盖已有的集合元素

2、treemap与treeset

a、treemap与treeset的关系与上面讲的hashmap和hashset的关系类似,treeset的底层实际使用的存储是treemap

b、treemap采用一种被称为红黑树的排序二叉树保存每个entry,每个entry都被当成一个节点,每次向tremap放入一个keyvalue时,系统都要将该entry

当成一个新的节点,这样可以保证treemap的key总是从小到大排列

c、treemap的添加和取出性能都比hashamap性能低,但是其优势在于其内部可以根据key保持有序状态

3、List

a、Map和List的底层实现上并没有太大相似之处,只是用法上有相似的地方,我们可以说List相当于所有key都是int的

Map也可以说Map相当于索引是任意类型的List

b、主要有三个:ArrayList,Vector,LinkedList

c、简单来看,Vector其实就是ArrayList的线程安全版本,其绝大部分方法的实现是相同的,只是Vector添加了synchronization修饰

d、如果只是单纯的添加节点,LinkedList的性能会非常好,不过,如果需要向指定索引添加节点,LinkedList

需要先找到索引处节点,这个搜索的开销也较大,可以单纯的使用LinkList的addFirst(E)、addList(E)等来操作LinkedList避免搜索

e、ArrayList的性能总体优于LinkedList,get(index)时候ArrayList的性能非常高,add(index,obj)的时候LinkedList的性能较好,

所以,大部分情况下优先考虑使用ArrayList,但如果经常增删元素,则优先考虑使用LinkedList


猜你喜欢

转载自blog.csdn.net/jianjiankedizai/article/details/50960309