在撸代码时的 Java 基础代码


[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<>();

文章作者: Jarrycow
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jarrycow !
评论
  目录