JAVA 常用容器

1.List

接口:java.util.List<>

采用接口方式创建类的对象

List<Integer> l = new ArrayList<>(int initialCapacity);

List<Integer> l = new LinkedList<>(Collection<? extends E> c); 使用集合创建链表

实现:

  • java.util.ArrayList<>:变长数组(可直接访问下标的单链表)
  • java.util.LinkedList<>:双链表

常用函数:

  • add():在末尾添加一个元素
  • clear():清空
  • size():返回长度
  • isEmpty():是否为空
  • get(i):获取第i个元素(取值)
  • set(i, val):将第i个元素设置为val(修改)

List可直接输出

2 栈

类:java.util.Stack<>

创建栈Stack<对象名> 栈名 = new Stack<>()

栈是Vector的一个子类,它实现了一个标准的后进先出的栈。堆栈除了包括由Vector定义的所有函数,也定义了自己的一些函数。

函数:

  • push():压入元素
  • pop():弹出栈顶元素,并返回栈顶元素。(C++只弹出,不返回)
  • search():返回元素在堆栈中的位置,以1为基数
  • peek():返回栈顶元素
  • size():返回长度
  • empty():栈是否为空
  • clear():清空

Stack 也可直接输出

3.队列

接口:java.util.Queue<>

创建:

Queue<对象> l = new LinkedList<>();

Queue<对象> l = new PriorityQueue<>();小根堆

Queue<对象> l = new PriorityQueue<>(Collections.reverseOrder());大根堆

实现:

  • java.util.LinkedList<>:双链表
  • java.util.PriorityQueue<>:优先队列
    • 默认是小根堆,大根堆写法:new PriorityQueue<>(Collections.reverseOrder())(C++默认是大根堆)

函数:

  • add():在队尾添加元素
  • remove():删除并返回队头
  • isEmpty():是否为空
  • size():返回长度
  • peek():返回队头
  • clear():清空

4. Set

接口:java.util.Set<K>

实现:

  • java.util.HashSet<K>:哈希表。插入删除修改查找都是O(1)
  • java.util.TreeSet<K>:平衡树 (动态维护一个有序序列)。插入删除修改查询都是O(logn)级别。

函数:

  • add():添加元素
  • contains():是否包含某个元素
  • remove():删除元素
  • size():返回元素数
  • isEmpty():是否为空
  • clear():清空

java.util.TreeSet多的函数:

ceiling(key):返回大于等于key最小元素,不存在则返回null
floor(key):返回小于等于key最大元素,不存在则返回null

5. Map

接口:java.util.Map<K, V>

实现:

java.util.HashMap<K, V>:哈希表
java.util.TreeMap<K, V>:平衡树
函数:

  • put(key, value):添加关键字和其对应的值

  • get(key):返回关键字对应的值

  • containsKey(key):是否包含关键字

  • remove(key):删除关键字

  • size():返回元素数

  • isEmpty():是否为空

  • clear():清空

  • entrySet():获取Map中的所有对象的集合

  • Map.Entry<K, V>:Map中的对象类型

  • getKey():获取关键字

  • getValue():获取值

java.util.TreeMap<K, V>多的函数:

  • ceilingEntry(key):返回大于等于key的最小元素,不存在则返回null
  • floorEntry(key):返回小于等于key的最大元素,不存在则返回null

拓展

前四个容器遍历时都可以用增强for循环,map的遍历:

public class Main {public static void main(String[] args){Map<Integer,String> m = new HashMap<>();m.put(1,"a");m.put(2,"b");m.put(3,"c");m.put(4,"d");for(Map.Entry<Integer,String> t:m.entrySet())System.out.println(t);/*输出1=a2=b3=c4=d*/}
}

 

你可能感兴趣的