假期学习16
第16天:Java集合(上)—— Collection体系
对应章节:第8章(前半部分)
(1)今天做了什么: Java集合框架分两大根接口:Collection(单列元素)和Map(双列键值对)。Collection下再分List(有序可重复)、Set(无序不重复)、Queue(队列)。Iterator迭代器是Collection的统一遍历方式——hasNext()判断、next()获取、remove()安全删除。List三大实现:ArrayList底层动态数组,get/set快O(1)、插入删除中间需移动O(n)、初始容量10、扩容为1.5倍;LinkedList底层双向链表,插入删除快O(1)、随机访问需遍历O(n);Vector是synchronized包装的老版本,已被ArrayList+Collections.synchronizedList取代。练习:用ArrayList和LinkedList各做10万次增删查改,记录时间对比。
(2)明天准备做什么: 学习第8章Set与Queue部分——HashSet(hashCode+equals判断重复)、TreeSet(红黑树排序,Comparable和Comparator)、LinkedHashSet(维护插入顺序),以及Queue、Deque、PriorityQueue。练习TreeSet多字段排序和PriorityQueue任务调度。
(3)遇到的问题: ArrayList扩容机制:new ArrayList()初始为0(JDK 1.8),第一次add变成10,满后扩容oldCapacity+oldCapacity>>1即1.5倍。LinkedList的get(index)内部是循环遍历定位,当index很大时非常慢——需要随机访问的场景选ArrayList。Iterator遍历时直接调list.remove()会抛ConcurrentModificationException——必须用Iterator自身的remove()方法。
浙公网安备 33010602011771号