{张三26,1}{李斯,231}
在使用的时候,要注意是那种类型可以通过强转获取数据
本文主要关注Java编程中涉及到的各種集合类以及它们的使用场景
以上就是Set集合类的编程应用场景。那么应该怎样选择何时使用這些集合类呢
1) HashSet的性能总是比TreeSet好(特别是最常用的添加、查询元素等操作),因为TreeSet需要额外的红黑树算法来维护集合元素的次序只有当需要┅个保持排序的Set时,才应该使用TreeSet否则都应该使用HashSet 2) 对于普通的插入、删除操作,LinkedHashSet比HashSet要略慢一点这是由维护链表所带来的开销造成的。不過因为有了链表的存在,遍历LinkedHashSet会更快 3) EnumSet是所有Set实现类中性能最好的但它只能保存同一个枚举类的枚举值作为集合元素
如果一开始就知道ArrayList集合需要保存多少元素,则可以在创建它们时就指定initialCapacity大小这样可以减少重新分配的次数,提供性能ArrayList还提供了如下方法来重新分配Object[]数组
注意Stack的后进先出的特点
从代码中我們可以看到,LinkedList同时表现出了双端队列、栈的用法功能非常强大
PriorityQueue不允许插入null元素它还需要对队列元素进行排序,PriorityQueue的元素有两种排序方式
以上就是List集合类的编程应用场景。我们来梳理一下思路
1. java提供的List就是一个"线性表接口"ArrayList(基于數组的线性表)、LinkedList(基于链的线性表)是线性表的两种典型实现 2. Queue代表了队列,Deque代表了双端队列(既可以作为队列使用、也可以作为栈使用) 3. 因为数组鉯一块连续内存来保存所有的数组元素所以数组在随机访问时性能最好。所以的内部以数组作为底层实现的集合在随机访问时性能最好 4. 内部以链表作为底层实现的集合在执行插入、删除操作时有很好的性能 5. 进行迭代操作时,以链表作为底层实现的集合比以数组作为底层實现的集合性能好
我们之前说过Collection接口继承了Iterable接口,也就是说我们以上学习到的所有的Collection集合类都具有"可遍历性"
Iterable接口也是java集合框架的成员,它隐藏了各种Collection实现类的底层细节向应用程序提供了遍历Collection集合元素的统一编程接口:
除了可以使用iterator接口迭代访问Collection集合里的元素之外使用java5提供的foreach循环迭代访问集合元素更加便捷
从代码中可以看出类似于TreeSet中判断两个元素是否相等的标准,TreeMap中判断两个key相等的标准是:
我们在重写这两个方法的时候一定偠保证它们的逻辑关系一致
Set和Map的关系十分密切,java源码就是先实现了HashMap、TreeMap等集合然后通过包装一个所有的value都为null的Map集合实现了Set集合类
如果需要使用WeakHashMap的key来保留对象的弱引用则不要让key所引用的对象具有任何强引用,否则将失去使用WeakHashMap的意义
与创建普通Map有所区别的是创建EnumMap是必须指定一个枚举类,从而将该EnumMap和指定枚举类关联起来
以上就是Map集合类的编程应用场景我们来梳理一下思路
1) HashMap和Hashtable的效率大致相同,因为它们的实现机制几乎完全一样但HashMap通常比Hashtable要快一点,因为Hashtable需要额外的线程同步控制 3) 使用TreeMap的一个好处僦是: TreeMap中的key-value对总是处于有序状态无须专门进行排序操作
{张三26,1}{李斯,231}
在使用的时候,要注意是那种类型可以通过强转获取数据