[toc]
基本结构
整数最小值
Integer.MIN_VALUE
整数最大值
Integer.MAX_VALUE
求和
stream.sum()
取最大值
Math.max(num1, num2)
数据结构
数组
数组排序
Arrays.sort(nums);
数组求和
Arrays.stream(arr).sum();
数组切片
Arrays.copyOfRange(nums, ibegin, iend + 1);
数组最值
Arrays.stream(nums).min().getAsInt()
多维数组排序
Arrays.sort(nums, (a, b) -> a[0] - b[0]);
可变数组
初始化
ArrayList<Integer> ans = new ArrayList<>();
添加元素
ans.add(num);
访问元素
ans.get(id);
修改元素
ans.set(id, newNum);
删除元素
ans.remove(id);
数组长度
ans.size();
排序
Collections.sort(ans);
链表
双链表
初始化
LinkedList<Integer> nums = new LinkedList<>();
元素个数
nums.size();
链表中是否存在元素
nums.contaions(num);
尾部添加
nums.add(num);
nums.addLast(num);
头部添加
nums.addFirst(num);
尾部删除
nums.removeLast();
头部删除
nums.removeFirst();
列表
列表初始化
List<List<Integer>> lis = Arrays.asList(
Arrays.asList(0, 1),
Arrays.asList(2, 3)
);
列表内容获取
lis.get(index);
数组转列表
Arrays.asList(arrays);
栈
新建栈
Stack<Integer> st = new Stack<Integer>();
入栈
st.push(x);
出栈
st.pop();
栈空
st.empty();
队列
初始化队列
Queue<Integer> queue = new LinkedList<Integer>();
入队
queue.offer(x);
出队
queue.poll();
取队首
queue.peek();
遍历队列
for(Integer q : queue){
...
}
双端队列
声明一个双端队列
Deque<String> deque = new ArrayDeque<>();
队尾入栈
deque.addLast(ch);
deque.offerLast(ch);
队尾出栈
deque.pollLast();
取队尾元素
deque.peekLast()
堆(优先权队列)
初始化小顶堆
Queue<Integer> heap = new PriorityQueue<>();
初始化大顶堆
Queue<Integer> heap = new PriorityQueue<>((x, y) -> (y - x));
添加元素
heap.add(num);
出队元素
小根堆默认递增出队
heap.poll();
队顶元素
heap.peek();
字符串
字符定位
s.indexOf(ch);
重复构造字符串 cnt 次
s.repeat(cnt)
字符串替换
s.replace(old_str, new_str);
字符串转换字符数组
s.toCharArray();
字符转化为字符串
String.valueOf(ch)
字符串分割
s.split(grex);
字符串分割
s.substring(start, end);
去除开头结尾空格
s.trim();
数组凑成字符串
String.join(" ", wordList);
字符串相等
s1.equals(s2)
s1 == s2
有些时候在本地跑的通,但力扣不一定
字符串拼接
s1 + s2;
但是效率并不高,并不建议在 for 循环中使用。如果需要进行频繁的字符串拼接,推荐使用 StringBuilder/StringBuffer
可变字符串
在 Python 和 Java 等语言中,字符串都被设计成「不可变」的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。
新建字符串
StringBuilder res = new StringBuilder();
字符串拼接
res.append(ch);
ch
支持拼接字符、字符串、数字等类型
字符串删除
res.delete(start, end);
res.deleteCharAt(idx);
字符串替换
res.replace(start, end, newStr);
转换字符串
res.toString();
哈希表
新建哈希表
Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
判断键值是否存在
hashtable.containsKey(key);
返回键所映射到的值
hashtable.get(key);
如果键不存在,返回默认值
hashtable.getOrDefault(key, defaultValue)
哈希表插入
hashtable.put(key, value);
修改哈希表的值
hashtable.put(key, hashtable.getOrDefault(key, 0) + 1);
哈希表删除
hashtable.remove(key);
哈希表的清理
hashtable.clear();
根据 Key 排序
直接默认 hashtable.keySet()
是按照将 Key 转换为字符串的字典序
List<String> keySet = new ArrayList<>(hashtable.keySet());
Collections.sort(keySet);
哈希集合
新建集合
Set<Integer> hashset = new HashSet<Integer>();
添加元素
hashset.add(num)
批量添加元素
Set<String> hashset = new HashSet<>(Arrays.asList("a", "b"));
删除元素
hashset.remove(num);
元素存在
hashset.contains(num);
有序哈希表
有序哈希表中的键值对是 按照插入顺序排序 的。
新建哈希表
Map<Character, Boolean> hashdic = new LinkedHashMap<>();