欢迎来到天天文库
浏览记录
ID:34424810
大小:97.50 KB
页数:13页
时间:2019-03-06
《java集合类及并发包的实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、集合类Collection接口Collection的实现主要有List,Set,两者之间的主要区别是,List支持重复,Set不支持,List的实现包括:ArrayList,LinkedList,Vector,Stacl.;Set的实现包括:HashSet,TreeSetCollection的主要方法:add(E):添加元素remove(E):删除get(index):得到contains(E):含有iterator():得到遍历器ArrayList实现方式创建ArrayList默认构造器通过调用ArrayList(int)来完成创建,传入值10
2、。代码:super()调用了默认构造器,是空的。这段代码最重要的就是,创建了一个Object数组,并赋给了当前elementData属性,数组大小是传入的initialCapacity,因此newArrayList()将会创建一个大小10的数组。插入对象:add(E)插入对象时,会根据Object数组当前已有元素属性+1得到一个minCapacity,如果大于Object数组大小,则先将Object数组赋给另一个数组,然后得到一个新的数组大小=当前数组大小*1.5+1,如果这个值小于minCapacity,则minCapacity为新数组的大小,
3、然后使用Arrays.copyOf来产生新的数组。add(E,index)方法:这个在指定位置插入值,首先要确保位置存在且Object数组大小足够,插入后,所有index之后的元素都要向后移一位,这就是多一次复制数组的代价其他插入方法:addAll(Collection),addAll(int,Collection)删除对象:remove(E)判断E是否为null,是则遍历所有元素,null是否存在,存在,则所有其后元素向前复制一位,并将最后的设为null(释放)E不是null,则通过E的equals来
4、判断对象是否存在。获取单个对象:get(int)使用ArrayList最好的地方,get(int)直接得到数组位置的元素(判断int的范围)遍历对象:iterator()ArrayList中的内部类Itr,hasNext(),就是当前位置和数组元素大小比较,相等false,否则truenext()方法,会比较创建此Iterator时的modCount属性和当前的modCount属性,如果不相等,说明在遍历时发生了改变Object数组元素的行为(add,remove),抛出ConcurrentModificationException,相等,则取下
5、一个元素(get方法),取不到,抛出IndexOutOfBoundsException注意:ArrayList基于数组实现,无容量限制增加元素时可能扩大数组,但是删除时不会减小数组大小。对于非null元素,用equals方法判断相等线程非安全LinkedList实现方式基于双向链表的实现,内部有Entry类,代表元素,有element属性代表value,next属性指向下一个Entry,previous属性指向上一个元素,这种机制有利于快速实现集合中元素的移动所有的方法基于链表机制,不做解释非线程安全。Vector数组实现。与ArrayList相
6、似不同处:add(E)方法在扩容时,如果capacityIncrement属性大于0,则数组大小为现有size+capacityIncrement,如果capacityIncrement<=0,则大小为现有size*2所以Vector可以通过传入capacityIncrement来控制容量的扩充add(E),remove(E),get(int)方法都是synchronized的线程安全的。Stack继承与Vector,实现了LIFO,HashSet基于HashMap实现add(E):通过HashMap的put(Object,Object)方法,将
7、要添加的元素作为key,value传入一个之前已创建的Object其他方法都是通过HashMap来实现的非线程安全TreeSet基于TreeMap实现,支持排序,非线程安全Map接口并发包(java.util.concurrent)ConcurrentHashMap线程安全的HashMap实现ConcurrentHashMap()和HashMap一样,有initialCapacity属性,loadFactor属性,还多一个concurrencyLevel属性。三个属性默认值是,16,0.75和16以下方式计算ssize的值intsshift=0;
8、intssize=1;while(ssize
此文档下载收益归作者所有