相关文章:
Java 集合框架分析:Set
http://blog.csdn.net/youyou1543724847/article/details/52733723
Java 集合框架分析:LinkedList
http://blog.csdn.net/youyou1543724847/article/details/52734935
Java 集合框架分析:DelayQueue
http://blog.csdn.net/youyou1543724847/article/details/52176504
Java 集合框架分析:ArrayBlockingQueue
http://blog.csdn.net/youyou1543724847/article/details/52174308
Java 集合框架分析:ArrayDeque
http://blog.csdn.net/youyou1543724847/article/details/52170026
Java 集合框架分析:PriorityBlockingQueue
http://blog.csdn.net/youyou1543724847/article/details/52166985
Java 集合框架分析:JAVA Queue源码分析
http://blog.csdn.net/youyou1543724847/article/details/52164895
Java 集合框架分析:关于Set,Map集合中元素判等的方式
http://blog.csdn.net/youyou1543724847/article/details/52733766
Java 集合框架分析:ConcurrentModificationException
http://blog.csdn.net/youyou1543724847/article/details/52733780
Java 集合框架分析:线程安全的集合
http://blog.csdn.net/youyou1543724847/article/details/52734876
Java 集合框架分析:JAVA集合中的一些边边角角的知识
http://blog.csdn.net/youyou1543724847/article/details/52734918
JAVA集合中的一些边边角角的知识
NULL在集合中是否允许
Queue:不允许插入Null值(一个主要原因:Queue的poll方法会返回Queue中的head元素,但是如果队列为空,则返回NULL,这里如果本来队列中含有Null,则会分不清)
Deque:不强制限制,但是不提倡插入NULL
ArryDeque:不允许
LinkedList:允许
ArryList:允许,运行存在多个null
EnumSet:不允许
HashSet:允许
TreeSet:不允许
EnumMap:不允许Null key,可以有NULL value
HashMap:可以有Null的key和value
HashTable:不可以有Null的key和value
排序算法
Java集合上的排序是稳定的排序(JAVA中对对象的排序是采用的问题排序,对非对象元素上的排序,无所谓稳定不稳定,采用的是不稳定算法即快排)
即:
Arrys.sort:使用Dual_priot_quick_sort,不稳定
Collections.sort:使用TimSort算法(一种稳定、可适应性的、抗最坏情况的、可迭代的归并排序),稳定的(同list.sort)(其实就是改进后的归并算法,至少采用了一些策略放在在比较短的时候有比较好的性能,或是元素有一些局部特性时,利用这些特性,来获取较好的性能)
集合上的迭代
Iterator接口
一、和 Enumeration 的区别是:
1.某些Iterators子类可以允许通过Iterator进行删除元素
2.命名更好
二、方法
PS:注意remove、forEachRemaining,这属于Java 8的新特性,属于接口的默认方法
关于remove方法说明:
Removes from the underlying collection the last element returned by this iterator (optional operation). This method can be called only once per call to next(). The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method.
只能在调用Next方法后,调用一次remove方法,删除的是当前通过next操作返回的元素。
ListIterator
一、和Iterator的区别是:
ListIterator继承与Iterator,相比与Iterator来说,优点是:
1.可以通过listiterator进行双向遍历(list只能向后遍历)
2.另外,通过通过listiterator进行修改list
3.listiterator的游标不指向元素,而是指向元素前后之间的空隙,如:
PS:一个有N个元素的list,有N+1个可能的游标位置。
二、方法
集合上的序列化
集合上的迭代和序列化其实都是和具体的集合密切相关的。对于集合来说,虽然Collection接口定义了iterator方法,但是真正的迭代的实现都是通过具体集合对象中定义的内部私有iterator的子类来完成的。意思就是只有具体的集合对象才知道如何迭代。
同理,集合的序列化也是这样的,只有具体的集合对象才知道如何序列化里面的元素,但是和迭代不同的是,底层接口并没有继承Serializable接口,而是具体的集合对象才继承了Serializable接口。