LeetCode 一些常用 Java 函数

996 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

本文主要记录一些 Java 函数,这些函数经常会在刷 LeetCode 时使用。因为经常忘记,所以在此记录。

HashMap

初始化

HashMap<String, Integer> hashmap = new HashMap<>();

添加 Key

hashmap.put("aa", 1);

删除 Key

hashmap.remove("key"); // 成功:返回 Key 对应的 Value,失败返回 null

获取元素

hashmap.get("key"); // 获取元素值
hashmap.getOrDefault("key", defaultValue); // 获取元素值,如果 Key 不存在时,返回 defaultValue

元素遍历

Iterator iterator = hashmap.entrySet().iterator();
while (iterator.hashNext()) {
    String key = (String) iterator.next();
    Integer value = (Integer) hashmap.get("key");
}

判断 Key 或 Value 是否存在

hashmap.containsKey("key");
hashmap.containsValue(value);

替换元素

hashmap.replace("aa",2); // 存在 key,会替换原来的 value,并返回旧 value,同 put 方法。对于不存在的方法,replace 方法什么都不做,这是和 put 的区别。

集合遍历

Map<Character, Integer> map = new HashMap<Character, Integer>();

for (Map.Entry<Character,Integer> entry : map.entrySet()) {
    int value = entry.getValue();
}

ArrayList

初始化

List<Integer> list = new ArrayList<>();

排序

Collections.sort(list);

StringBuilder

初始化

StringBuilder stringBuilder = new StringBuilder(100);

拼接字符串

stringBuilder.append("abc"); // 将 abc 拼接在原来字符串后面

转化成 String

String s = stringBuilder.toString();

获取字符串长度

int length = stringBuilder.length();

字符串截取

String s1 = stringBuilder.substring(int start);
String s2 = stringBuilder.substring(int start, int end); // 前闭后开

字符串清空

stringBuilder.delete(0, stringBuilder.length());

字符串反转

stringBuilder = stringBuilder.reverse();

数字变字符

stringBuilder.append((char)('A' + 1)); // (char)('A' + 1) == B

Stack

初始化

Stack<Integer> stack = new Stack<>();

判断栈是否为空

stack.empty();

入栈

stack.push(1);

出栈

stack.pop();

获取栈顶元素,但是不弹出

stack.peak();

int[] 数组

初始化

int[] a = new int[10];

有元素时初始化数组

int[] a = new int[]{1,2};

数组排序(递增)

Arrays.sort(a);

数组排序(自定义排序)

Arrays.sort(a, new Comparator<int[]>() {
  public int compare(int[] a1, int[] a2) {
    return a1[0] - a2[0];
  }
});

String

判断字符串是否相等

if (A.equals(B)) {

}

判断字符串是否相等(区分大小写)

if (A.equalsIgnoreCase(B)) {

}

字符串转整数

String s = "123";
byte a = Byte.parseByte(s);
short b = Short.parseShort(s);
int c = Integer.parseInt(s);
long d = Long.parseLong(s);
Float e = Float.parseFloat(s);
Double f = Double.parseDouble(s);
boolean g = Boolean.parseBoolean(s);
char h = Character.parseCharacter(s);

字符串转 char 数组

char[] ch = s.toCharArray();

Character

判断一个字符是否是字母或者数字

Character.isLetterOrDigit(char ch);

字符转小写

Character.toLowerCase(char ch);

char

获取 char 数组长度

int length = s.length;

AtomicInteger(原子操作)

初始化

AtomicInteger ai = new AtomicInteger(0);

加 1 后返回新值

ai.incrementAndGet();

获取当前值

int a = ai.get();

添加值并返回新值

ai.addAndGet(int value);

HashSet

初始化

HashSet<Integer> hashset = new HashSet<>();

添加元素

hashset.add(1);

判断元素是否存在

hashset.contains(1);

删除元素

hashset.remove(1);

计算大小

hashset.size();

迭代

for (int i : hashset) {
  System.out.println(i);
}

Deque(双端队列)

初始化

Deque<Integer> deque = new LinkedList<>();

添加元素到队尾

deque.offerLast(1); // 1
deque.offerLast(2); // 2 -> 1
deque.offerLast(3); // 3 -> 2 -> 1

获取队首元素并删除

System.out.println(deque.pollFirst()); // 1 剩下 3 -> 2

获取队首元素但不删除

System.out.println(deque.peekFirst()) // 2 剩下 3 -> 2

添加元素到队首

deque.offerFirst(4); // 3 -> 2 -> 4

获取队尾元素并删除

System.out.println(deque.pollLast()); // 3 剩余 2 -> 4

获取队尾元素但不删除

System.out.println(deque.peekLast()); // 2 剩余 2 -> 4

Queue

初始化

Queue<Integer> queue = new LinkedList<>();

添加元素到队尾

queue.offer(1); // 1
queue.offer(2); // 2 -> 1
queue.offer(3); // 3 -> 2 -> 1

取队首元素并删除(获取不到返回 false 或 null)

System.out.println(queue.poll()); // 1 剩余 3 -> 2
System.out.println(queue.poll()); // 2 剩余 3
System.out.println(queue.poll()); // 3
System.out.println(queue.poll()); // null 因为队列为空

获取队首元素但不删除(获取不到返回 null 或 false)

queue.offer(4); // 4
System.out.println(queue.peek()); // 4

PriorityQueue

初始化

PriorityQueue<Integer> queue = new PriorityQueue<>();

添加元素

queue.offer(1);

弹出元素

queue.poll();  // 弹出 1