容器(Collection/Map)、容器中的设计模式

1.容器

主要包括:

  • Collection:存储着对象的集合
  • Map:存储着键值对(两个对象) 的映射表。

1.1 Collection

  • Set
  • List
  • Queue

1.1.1 Set

  • TreeSet:
  • HashSet
  • LinkedHashSet

对比:

 基于支持时间复杂度
TreeSet红黑树有序性操作O(logN)
HashSet哈希表快速查,不支持有序性操作O(N)
LinkedHashSet双向链表使用双向链表维护O(N)

1.1.2 List

  • ArrayList
  • Vector
  • LinkedList

对比:

 基于支持线程安全?
ArrayList动态数组随机访问
Vector动态数组随机访问
LinkedList双向链表

只能顺序访问;

可快速插入删除;

可以用作栈、队列和双向队列

1.1.3 Queue

  • LinkedList
  • PriorityQueue

对比:

 基于可实现
LinkedList双向链表双向队列
PriorityQueue优先队列

1.2 Map

  • TreeMap
  • Hashtable
  • LinkedHashMap
  • HashMap

对比:

 基于线程安全?
TreeMap红黑树
Hashtable*哈希表
LinkedHashMap

用双向链表维护元素的顺序

顺序为插入顺序或者

最近最少使用(LRU) 顺序

HashMap哈希表

*: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);

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部