List
接口:java.util.List<>。
实现:
java.util.ArrayList<>:变长数组
java.util.LinkedList<>:双链表
函数:
add():在末尾添加一个元素
clear():清空
size():返回长度
isEmpty():是否为空
get(i):获取第i个元素
set(i, val):将第i个元素设置为val
下面是各种用法的举例:
import java.util.*;
public class STL_List {
public static void main(String[] args) {
ArrayList<Integer> list_1 = new ArrayList<>();
LinkedList<Integer> list_2 = new LinkedList<>();
list_1.add(1);
list_1.add(2);
list_1.add(3);
list_1.add(4);
list_2.add(5);
list_2.add(6);
list_2.add(7);
list_2.add(8);
list_2.add(9);
list_2.add(10);
System.out.println("List_1: " + list_1);
System.out.println("List_2: " + list_2);
System.out.println("List_1 size: " + list_1.size());//返回list_1的长度
System.out.println("List_2 size: " + list_2.size());//返回list_2的长度
System.out.println("List_1 is empty: " + list_1.isEmpty());//判断list_1是否为空
System.out.println("List_2 is empty: " + list_2.isEmpty());//判断list_2是否为空
System.out .println(list_1.get(2));//返回list_1中索引为2的元素
System.out .println(list_2.get(2));//返回list_2中索引为2的元素
list_1.set(2, 100);//修改list_1中索引为2的元素为100
System.out.println(list_1.get(2));
}
}
栈
类:java.util.Stack<>
函数:
push():压入元素
pop():弹出栈顶元素,并返回栈顶元素
peek():返回栈顶元素
size():返回长度
empty():栈是否为空
clear():清空
下面是栈的各种用法的举例:
import java.util.*;
public class STL_Stack {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);//压入元素
System.out.println(stack.peek());//查看栈顶元素
int t = stack.pop();//弹出栈顶元素,并且返回弹出的元素
System.out.println(t);
System.out.println(stack.size());//返回栈的长度
System.out.println(stack.isEmpty());//判断栈是否为空
stack.clear();//清空栈
System.out.println(stack.isEmpty());
}
}
队列
接口:java.util.Queue<>
实现:
java.util.LinkedList<>:双链表
java.util.PriorityQueue<>:优先队列
默认是小根堆,大根堆写法:new PriorityQueue<>(Collections.reverseOrder())
函数:
add():在队尾添加元素
remove():删除并返回队头
isEmpty():是否为空
size():返回长度
peek():返回队头
clear():清空
下面是队列各函数的用法:
import java.util.*;
public class STL_Queue {
public static void main(String[] args) {
Queue<Integer> queue_1 = new LinkedList<>();
Queue<Integer> queue_2 = new PriorityQueue<>();//默认小顶堆
for (int i = 10; i > 0; i--) {
queue_1.add(i);
queue_2.add(i);
}//在队列中添加元素
System.out.println("Queue_1: " + queue_1);
System.out.println("Queue_2: " + queue_2);
System.out.println("Queue_1 size: " + queue_1.size());//返回队列的长度
System.out.println("Queue_2 size: " + queue_2.size());//返回队列的长度
System.out.println("Queue_1 is empty: " + queue_1.isEmpty());//判断队列是否为空
System.out.println("Queue_2 is empty: " + queue_2.isEmpty());//判断队列是否为空
System.out.println("Queue_1 peek: " + queue_1.peek());//返回队列的第一个元素,但不删除
System.out.println("Queue_2 peek: " + queue_2.peek());//返回队最小的元素,但不删除
queue_1.remove();//删除队列的第一个元素
queue_2.remove();//删除队列的第一个元素
}
}
Set
接口:java.util.Set
实现:
- java.util.HashSet:哈希表
- java.util.TreeSet:平衡树
函数:
add():添加元素
contains():是否包含某个元素
remove():删除元素
size():返回元素数
isEmpty():是否为空
clear():清空
java.util.TreeSet多的函数:
ceiling(key):返回大于等于key的最小元素,不存在则返回null
floor(key):返回小于等于key的最大元素,不存在则返回null
下面是set的各种函数的用法:
import java.util.*;
public class STL_Set {
public static void main(String[] args) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new TreeSet<>();
for (int i = 1; i <= 10 ; i++) {
set1.add(i);
set2.add(i);
}
System.out.println("set1: " + set1);
System.out.println("set2: " + set2);
System.out.println(set1.contains(3));//判断元素3是否在集合中
System.out.println(set2.contains(3));//判断元素3是否在集合中
set1.remove(3);//删除元素3
set2.remove(3);//删除元素3
System.out.println("set1: " + set1);
System.out.println("set2: " + set2);
System.out.println(set1.size());//返回集合中元素的个数
System.out.println(set2.size());//返回集合中元素的个数
Integer floor = ((TreeSet<Integer>) set2).floor(3);//返回小于等于3的最大元素
Integer ceiling = ((TreeSet<Integer>) set2).ceiling(3);//返回大于等于3的最小元素
System.out.println(floor);
System.out.println(ceiling);
set1.clear();//清空集合
set2.clear();//清空集合
System.out.println("set1: " + set1);
System.out.println("set2: " + set2);
}
}
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
下面是map的各种函数的用法:
package foundational;
import java.util.*;
public class STL_Map {
public static void main(String[] args) {
Map<String, Integer> map1 = new HashMap<>();
Map<String, Integer> map2 = new TreeMap<>();
map1.put("a", 1);
map1.put("b", 2);
map1.put("c", 3);
map2.put("a", 1);
map2.put("b", 2);
map2.put("c", 3);
System.out.println("Map1: " + map1);
System.out.println("Map2: " + map2);
System.out.println(map1.get("a"));//返回map1中键为"a"的值
System.out.println(map2.get("b"));//返回map2中键为"b"的值
System.out.println(map1.containsKey("a"));//判断map1中是否存在键为"d"的元素
System.out.println(map2.containsKey("e"));//判断map2中是否存在键为"e"的元素
map1.remove("a");//删除map1中键为"a"的元素
System.out.println(map1);
map1.clear();//清空map2
System.out.println(map1);
System.out.println(map2.size());//返回map2的长度
System.out.println(map2.isEmpty());//判断map2是否为空
System.out.println(map2.keySet());//返回map2的所有键
System.out.println(map2.values());//返回map2的所有值
System.out.println(map2.entrySet());//返回map2的所有键值对
}
}