各个容器类的关系

概览


使用指南

Queue

单端队列数据结构(先进先出),链式储存。

Queue<String> a = new LinkedList<String >();

// 队列尾部添加元素
a.offer("one");
a.offer("two");

// 队列前端删除元素
a.poll();

Deque

双端队列数据结构(可以两端添加和删除元素),链式储存。

Deque<String> a = new LinkedList<String >();

// 队尾添加元素
a.offer("one");
a.offer("two");

// 队前添加元素
a.offerFirst("three");  

// 队尾删除元素
a.pollLast();

Stack

栈数据结构,先进先出。有两种实现方法。它们略有不同。但都能实现先进先出。

1. 链式栈

名义上使用Deque接口,实际使用pop和push方法。

Deque<String> a = new LinkedList<String >();

a.push("1");
a.push("2");
a.push("3");
a.push("4");
a.pop();
System.out.println(a.toString());

// 返回
[3,2,1]
2. 顺序栈
Stack<String> a = new Stack<String>();

a.push("1");
a.push("2");
a.push("3");
a.push("4");
a.pop();
System.out.println(a.toString());

// 返回
[1,2,3]

顺序列表

简单的线性序列容器。顺序储存。

1. ArrayList
ArrayList<String> a = new ArrayList<String>();

a.add("1");
a.add("2");
a.add("3");
a.add("4");
a.remove(0);
2. Vector

Vector和ArrayList几乎是一样的,不同之处在于Vector是线程安全的。

Set

无序集合容器,特点是可以快速判断集合中是否存在某个元素。还可以快速删除已知值的元素。
它有两种实现方法。

1. HashSet

底层是散列表(哈希算法)数据结构

Set<String> a = new HashSet<String>();

a.add("1");
a.add("2");
a.add("3");

// 删除某元素
a.remove("2");

System.out.println(a.contains("2"));
2. TreeSet

底层是平衡二叉树数据结构。如果使用Set接口则于HashSet用法完全一致。只是底层实现不一样而已。

Set<String> a = new TreeSet<String>();

Map

一种关联容器接口,有每一个键(key)都有唯一对应的值(value)。它有两种底层实现。

1. HashMap

底层为散列表数据结构。

Map<Integer, String> a = new HashMap<Integer, String>();

a.put(1, "a");
a.put(2, "b");
a.put(33, "c");
a.put(4, "d");
for( Integer key : a.keySet()){
     System.out.println(key.toString() + ":" + a.get(key));
}

// 返回
1:a
33:c
2:b
4:d
2. TreeMap

底层为红黑树数据结构。

Map<Integer, String> a = new TreeMap<Integer, String>();

a.put(1,"a");
a.put(2, "b");
a.put(33, "c");
a.put(4, "d");

for( Integer key : a.keySet()){
     System.out.println(key.toString() + ":" + a.get(key));
}
// 返回
1:a
2:b
4:d
33:c

参考文章

https://juejin.im/post/5cac034fe51d456e425dd964

最后修改:2020 年 06 月 17 日
如果觉得我的文章对你有用,请随意赞赏