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=a
2=b
3=c
4=d
*/
}
}