8.常用的容器
List
以下用T代表类型。
-
接口 :
java.util.List<T>
-
实现:
java.util.ArrayList<T>
:变长数组java.util.LinkedList<T>
:链表
-
函数:
add()
:添加一个元素clear()
:清空,这时长度为0size()
:返回链表的长度isEmpty()
:返回是否为空get(int i)
:返回第i个元素的值set(i, val)
:将第i个元素设置为val
例子如下:
java
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> arr = new ArrayList<Integer>(10);
for(int i = 0; i < 10; i ++)
arr.add(i);
//按照array来创建LinkedList
List<Integer> link = new LinkedList<Integer>(arr);
System.out.println(link.set(5, 1));
//支持增强版的for循环
for(Integer i : link)
System.out.println(i);
}
}
栈
只有栈是类,不是接口,其他容器都是接口。
-
类 :
java.util.Stack<T>
-
函数:
push(item)
:压入元素pop()
:弹出栈顶元素并返回peek()
:返回栈顶元素size()
:返回长度empty()
:返回栈是否为空clear()
:清空
示例:
java
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
for(int i = 0; i < 10; i ++)
stack.push(i);
System.out.println(stack.pop());
System.out.println(stack.peek());
System.out.println(stack.size());
}
}
队列
-
接口 :
java.util.Queue<T>
-
实现:
java.util.LinkedList<T>
java.util.PriorityQueue<T>
默认是小根堆,若要实现大根堆:
javaQueue<Integer> q = new PriorityQueue<Integer>(Collections.reverseOrder());
-
函数:
add(i)
:队尾添加元素remove()
:删除对头元素并返回isEmpty()
:返回是否为空size()
:返回长度peek()
:返回队头clear()
:清空
示例:
java
import java.util.Queue;
import java.util.PriorityQueue;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
Queue<Integer> q = new PriorityQueue<Integer>(Collections.reverseOrder());
for(int i = 0; i < 10; i ++)
q.add(i * i * i - i * i + i);
while(q.size() > 0)
System.out.println(q.remove());
}
}
Set
Set
集合中的元素是无须的且不可重复。
-
接口 :
java.util.Set<K>
-
实现:
java.util.HashSet<K>
:哈希表java.util.TreeSet<K>
:平衡树
-
函数:
add(item)
:添加元素contains(item)
:是否包含某个元素remove(item)
:删除元素,返回是否删除成功size()
:返回元素数isEmpty()
:返回集合是否为空clear()
:清空集合
除此之外,
java.util.TreeSet<K>
多出来的函数:ceiling(key)
:返回大于等于 key的最小的元素,不存在则返回null
floor(key)
:返回小于等于 key的最大的元素,不存在则返回null
Map
与C++一样,java里的Map
也是维持key->value
的键值对映射的数据结构。
-
接口 :
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中所有对象的集合,示例如下:
注意Set的元素类型。
javaMap<Integer, String> mp = new HashMap<Integer, String>(); mp.put(1, "one"); Set<Map.Entry<Integer, String>> ms = mp.entrySet();
Map.Entry<K, V>
:map中的对象类型getKey()
:获取关键字getValue()
:获得值
-
java.util.TreeMap<K, V>
多出的函数:ceilingEntry(key)
:返回大于等于key的最小元素floorEntry(key)
:返回小于等于key的最大元素
示例如下:
java
TreeMap<Integer, String> mp = new TreeMap<Integer, String>();
mp.put(1, "one");
mp.put(2, "two");
mp.put(3, "three");
mp.put(4, "four");
Map.Entry<Integer, String> a = mp.ceilingEntry(3);
System.out.println(a.getKey()); //输出:3
System.out.println(a.getValue()); //输出:three