常用容器
List
接口:java.util.List<>
实现:
java.util.ArrayList<>
:变长数组java.util.LinkedList<>
:双链表
函数:
add()
:在末尾添加一个元素clear()
:清空size()
:返回长度isEmpty()
:是否为空get(i)
:获取第i个元素set(i, val)
:将第i个元素设置为val
栈
类:java.util.Stack<>
函数:
push()
:压入元素pop()
:弹出栈顶元素,并返回栈顶元素peek()
:返回栈顶元素size()
:返回长度empty()
:栈是否为空clear()
:清空
队列
接口:java.util.Queue<>
实现:
java.util.LinkedList<>
:双链表java.util.PriorityQueue<>
:优先队列- 默认是小根堆,大根堆写法:
new PriorityQueue<>(Collections.reverseOrder())
- 默认是小根堆,大根堆写法:
函数:
add()
:在队尾添加元素remove()
:删除并返回队头isEmpty()
:是否为空size()
:返回长度peek()
:返回队头clear()
:清空
Set
接口:java.util.Set<K>
实现:
java.util.HashSet<K>
:哈希表java.util.TreeSet<K>
:平衡树
函数:
add()
:添加元素contains()
:是否包含某个元素remove()
:删除元素size()
:返回元素数isEmpty()
:是否为空clear()
:清空
java.util.TreeSet
多的函数:
ceiling(key)
:返回大于等于key
的最小元素,不存在则返回null
floor(key)
:返回小于等于key
的最大元素,不存在则返回null
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
Pair
类:javafx.util.Pair<K, V>
例如:Pair<String, Integer> p = new Pair<>("a", 1)
函数:
getKey()
:获取关键字getValue()
:获取值
优先队列
接口:java.util.Queue<>
实现:java.util.PriorityQueue<>
:优先队列
默认是小根堆,大根堆写法:
new PriorityQueue<>(Collections.reverseOrder())
第二种定义方式
1
2
3
4// 定义大根堆
PriorityQueue<Integer> queMin = new PriorityQueue<Integer>((a, b) -> (b - a));
// 定义小根堆
PriorityQueue<Integer> queMax = new PriorityQueue<Integer>((a, b) -> (a - b));
常用方法:
add(e)
:在队尾插入元素,并调整堆结构。offer(e)
:在队尾插入元素,并调整堆结构。remove(e)
:获取队头元素并删除,并调整堆结构。poll(e)
:获取队头元素并删除,并调整堆结构。element()
:返回队头元素,不删除peek()
:返回队头元素,不删除isEmpty()
:判断队列是否为空size()
:获取队列中的元素个数clear()
:清空队列contains(o)
:判断队列中是否包含指定元素iterator()
:迭代器
其他
给二维数组赋初值
1 | int[][] arr = new int[100][100]; |
对数组指定范围的元素进行排序
Arrays.sort(arr, start, end)
:对数组中[start, end)
元素进行排序
数组自定义排序
练习题目:把数组排成最小的数
1 | int[][] arr = new int[10][2]; |
使用lambda表达式自定义排序规则
1 | int[][] arr = new int[10][2]; |
ArrayList去重
通过LinkedHashSet
进行去重,LinkedHashSet
是有序不可重复的
1 | List<Integer> list = new ArrayList<>(Arrays.asList(1,2,2,3,3,1,2)); |
Java8新特性stream()
的distinct()
方法
1 | List<Integer> list = new ArrayList<>(Arrays.asList(1,2,2,3,3,1,2)); |
使用contains()
方法
1 | List<Integer> list = new ArrayList<>(Arrays.asList(1,2,2,3,3,1,2)); |
利用HashSet()
无序唯一的特性
1 | List<Integer> list = new ArrayList<>(Arrays.asList(1,2,2,3,3,1,2)); |
HashMap的7种遍历方式与性能分析
HashMap遍历从大的方向来说,可以分为四类:
- 迭代器(Iterator)方式遍历
- For Each方式遍历
- Lambda表达式遍历(JDK 1.8+)
- Streams API遍历(JDK 1.8+)
每种类型下又有不同的实现方式,因此具体的遍历方式又可以分为以下7种:
- 使用迭代器(Iterator)EntrySet的方式进行遍历。
- 使用迭代器(Iterator)KeySet的方式进行遍历。
- 使用for each EntrySet的方式进行遍历。
- 使用for each KeySet的方式进行遍历。
- 使用Lambda表达式的方式进行遍历。
- 使用Streams API单线程的方式进行遍历。
- 使用Streams API多线程的方式进行遍历。
针对如下的HashMap进行7种方式遍历。
1 | Map<Integer, String> map = new HashMap<>(); |
迭代器EntrySet
既安全又高效。首选。
1 | Interator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator(); |
迭代器keySet
1 | Iterator<Integer> iterator = map.KeySet().iterator(); |
For Each EntrySet
1 | for(Map.EntrySet<Integer, String> entry : map.entrySet()) { |
For Each KeySet
1 | for(Integer key : map.KeySet()) { |
Lambda
1 | map.forEach((key, value) -> { |
Streams API 单线程
1 | map.entrySet().stream().forEach((entry) -> { |
Streams API 多线程
1 | map.entrySet().parallelStream().forEach((entry) -> { |