接口: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
可直接输出
类:java.util.Stack<>
创建栈:Stack<对象名> 栈名 = new Stack<>()
栈是Vector
的一个子类,它实现了一个标准的后进先出的栈。堆栈除了包括由Vector
定义的所有函数,也定义了自己的一些函数。
函数:
push()
:压入元素pop()
:弹出栈顶元素,并返回栈顶元素。(C++只弹出,不返回)search()
:返回元素在堆栈中的位置,以1为基数peek()
:返回栈顶元素size()
:返回长度empty()
:栈是否为空clear()
:清空Stack
也可直接输出
接口: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()
:清空接口: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
接口: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*/}
}