欢迎来到我的个人网站。交流请加我好友: 919201148。欢迎关注公众号或视频号:蜗牛互联网
Solo  当前访客:1 开始使用

白色蜗牛的互联网心得

我要一步一步往上爬,在最高点乘着叶片往前飞

标签: 集合 (5)

集合包之Set

2016-07-04 00:22:08 huayonglun
0  评论    218  浏览

HashSet 实现: 为了不允许元素重复,基于HashMap实现 HashSet() 创建HashMap对象 add(E) 调用map的put(O,O),需要增加的元素作为map中的key,value传入一个已创建的final Object对象 remove(E) 调用map的remove(E) contains(E) 调用map.containsKey(E) iterator() 调用map.keySet的iterator方法 HashSet不支持get(int)获取指定位置的元素,只能自行通过iterator方法来获取 HashSet要点 基于HashMap实现,无容量限制 HashSet是非线程安全 TreeSet 实现 区别于HashSet支持排序,TreeSet基于TreeMap实现 TreeSet() 创建TreeMap对象 add(E) 调用TreeMap.put(O,O) remove(E) 调用TreeMap.remove(E) iterator() 调navig....

, , ,

并发包之 CopyOnWriteArrayList

2016-07-29 00:22:08 huayonglun
0  评论    214  浏览

CopyOnWriteArrayList 实现   线程安全, 读时无锁。 CopyOnWriteArrayList()   大小为 0 的数组 add(E)   无 synchronized 关键字   用 ReentrantLock   新数组 newlen = len + 1   新对象放结尾   引用切换 remove(E)   ReentrantLock 保证线程安全   新数组 newLen = len - 1   遍历 newLen 长度 若找到 equal ,后边元素前移,,引用切换,返回true 未找到,单个赋值给新数组   特殊处理最后一个元素 是否 equal ,是,删,引用切换,返回true 否,返回 false   与 ArrayList 相比,锁不同,复制没有调用 System.arrayCopy ,性能有下降 get(int)   直接获取, 无锁保护   可能 脏数据 ,性能高   适合写少读多且脏数据影响不大 iterator()   创建 CowIterator ,并保存当前数据的快照,不抛异常 总结 CopyOnWriteArrayLi....

, , ,

并发包之ConcurrentHashMap

2016-07-18 00:22:08 huayonglun
0  评论    212  浏览

概述 并发包包括: 高性能的线程安全的集合对象 原子操作类 避免并发时资源冲突的的Lock及Condition ConcurrentHashMap 实现方式   线程安全的HashMap实现 ConcurrentHashMap(initialCapacity , loadfactor, concurrencyLevel)   参数默认 initialCapacity 为 16,loadfactor 为 0.75, concurrencyLevel 为16   基于以下方式计算 ssize int sshift = 0; int ssize = 1; while(ssize < concurrencyLevel){ ++sshiftl; ssize <<= 1; }   在 concurrencyLevel 为 16 的情况下,最终计算出的 ssize 为 16,并使用此 ssize 作为参数传入 Segment 的 newArray 方法,创建大小为 16 的 Segment 对象数组,接着采用如下方法计算 cap 变量的值: int c = initialC....

, , ,

集合包之Map

2016-07-05 00:22:08 huayonglun
0  评论    214  浏览

HashMap HashSet() loadFactor默认0.75,threshold为12 并创建一个大小为16的Entry对象数组 可调用另外两个构造器控制初始容量值,loadFactor 数组大小由如下决定: int capacity = 1; while(capacity < initialCapacity) capacity <<= 1; capacity才是创建的Entry对象数组的大小,new HashMap(5,0.6),则设loadFactor为0.6,并创建一个大小为8的Entry对象数组,threshold则为4( 8 * 0.6 = 4 ) put(key, value) key为null,获取第一个Entry对象,并基于Entry的next遍历 找到key为null,更新value,返回 未找到,增加Entry。 增加时获取数组首个Entry:e,并创建Entry对象,key为null,value为传入对象,next为e。 若数组len >= threshold,扩容为2倍,扩容前对所有元素重新hash,....

, , ,

集合包之List

2016-05-13 00:22:08 huayonglun
0  评论    220  浏览

集合包 Collection:多个单对象 Map:键值对 ArrayList 实现: 数组实现 add(E) 更新minCapacity为已有数量+1 和Object数组比大小 若minCapacity大,将当前数组赋给一个数组对象,新容量为old * 1.5 + 1 若数组新容量大小仍小于minCapacity,更新minCapacity为新容量值 调用Arrays.CopyOf生成新数组对象 添加元素E进入数组 remove(E) 判断E是否为null 是,找出null,调用fastRemove完成对象的删除 否,equals比较,调用fastRemove remove(int) 相比较remove(E),多了数组范围检测 少了对象位置查找,性能更好 get(int) 获取单个对象 先进行数组范围检测 然后直接返回 iterator() 遍历对象 AbstractList的实现 hasNext() next() 获取的modCount与当前的modCount比较 不等,集合大小发生改变,抛ConcurrentM....

, , ,
TOP