Java 集合框架分析:JAVA集合中的一些边边角角的知识

相关文章:
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接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值