欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > asp.net >内容正文

asp.net

容器(collection/map)、容器中的设计模式 -凯发k8官方网

发布时间:2024/10/14 asp.net 24 豆豆
凯发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 接口的聚合对象:

list list = new arraylist<>();list.add("a");list.add("b");for (string item : list) {system.out.println(item);}

2.2 适配器模式

java.util.arrays#aslist() 可以把数组类型转换为 list 类型:

@safevarargs public static list aslist(t... a)

应该注意的是 aslist() 的参数为泛型的变长参数,不能使用基本类型数组作为参数,只能使用相应的包装类型数组。

integer[] arr = {1, 2, 3}; list list = arrays.aslist(arr);

也可以使用以下方式调用 aslist():

list list = arrays.aslist(1,2,3);

 

与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是凯发k8官方网为你收集整理的容器(collection/map)、容器中的设计模式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图