容器(collection/map)、容器中的设计模式 -ag凯发k8国际
ag凯发k8国际
收集整理的这篇文章主要介绍了
容器(collection/map)、容器中的设计模式
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
主要包括:
- collection:存储着对象的集合
- map:存储着键值对(两个对象) 的映射表。
1.1 collection
- set
- list
- queue
1.1.1 set
- treeset:
- hashset
- linkedhashset
对比:
基于支持时间复杂度treesethashsetlinkedhashset红黑树 | 有序性操作 | o(logn) |
哈希表 | 快速查,不支持有序性操作 | o(n) |
双向链表 | 使用双向链表维护 | o(n) |
1.1.2 list
- arraylist
- vector
- linkedlist
对比:
基于支持线程安全?arraylistvectorlinkedlist动态数组 | 随机访问 | 否 |
动态数组 | 随机访问 | 是 |
双向链表 | 只能顺序访问; 可快速插入删除; 可以用作栈、队列和双向队列 | 否 |
1.1.3 queue
- linkedlist
- priorityqueue
对比:
基于可实现linkedlistpriorityqueue双向链表 | 双向队列 |
堆 | 优先队列 |
1.2 map
- treemap
- hashtable
- linkedhashmap
- hashmap
对比:
基于线程安全?treemaphashtable*linkedhashmaphashmap红黑树 | 否 |
哈希表 | 是 |
用双向链表维护元素的顺序 顺序为插入顺序或者 最近最少使用(lru) 顺序 | 否 |
哈希表 | 否 |
*:hashtable是遗留类,不建议使用。现在可以使用 concurrenthashmap 来支持线程安全,并且concurrenthashmap 的效率会更高,因为 concurrenthashmap 引入了分段锁。
2.容器中的设计模式
2.1 迭代器模式
collection 实现了 iterable 接口,其中的 iterator() 方法能够产生一个 iterator 对象,通过这个对象就可以迭代遍历 collection 中的元素。
从 jdk 1.5 之后可以使用 foreach 方法来遍历实现了 iterable 接口的聚合对象:
list2.2 适配器模式
java.util.arrays#aslist() 可以把数组类型转换为 list 类型:
@safevarargs public static应该注意的是 aslist() 的参数为泛型的变长参数,不能使用基本类型数组作为参数,只能使用相应的包装类型数组。
integer[] arr = {1, 2, 3}; list list = arrays.aslist(arr);也可以使用以下方式调用 aslist():
list list = arrays.aslist(1,2,3);与50位技术专家面对面20年技术见证,附赠技术全景图
总结
以上是ag凯发k8国际为你收集整理的容器(collection/map)、容器中的设计模式的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 算法练习day19——190410(数组
- 下一篇: arraylist源码