Merikanto

一簫一劍平生意,負盡狂名十五年

Java Common Syntax

Java 常用操作的总结,主要用作个人备忘录,以后视情况会更新。



Basic


三目运算符

If boolean expression is true, then return value of a; Otherwise return value of b.

1
2
3
4
5
6
7
8
9
10
s = Boolean Expression ? exp. a : exp. b;

// e.g.
cur.next = (l1 == null) ? l2 : l1;

// 上面的相当于:
if (l1 == null)
cur.next = l2;
else
cur.next = l1;

输入操作

1
2
3
4
5
Scanner in = new Scanner(System.in);

String a = in.nextLine(); // Next line

int b = in.nextInt(); // Next int


String 操作


String 初始化:(两种)

1
2
3
String a = "hello";		// 用这种就可以了,简单

String b = new String("world");

String 相关方法

1
2
3
4
5
6
7
8
9
10
a.length();

a.equalsIgnoreCase(b); // 忽略大小写

a == b; // String 比较是否相等,用 equal。
// == 表示的是,内存地址是否一致

// 遍历 String 中元素 (不能像 arr 那样,直接 for 遍历元素)
for (int i = 0; i < s.length(); ++i)
char c = s.charAt(i);

String连接

1
2
3
4
5
String a = "hello";
String b = "world";

String s1 = a + b; // 直接相加
String s2 = a.concat(b); // 或者concat

常用提取方法

1
2
3
4
5
6
7
8
9
10
11
12
s.charAt(i);		// Python 中,s[i]

s.indexOf(char c); // c 第一次出现的index。相对应的,最后一次出现为 lastIndexOf
s.lastIndexOf();

s.indexOf(String s); // 整个 str 第一次出现的index (String首个char的位置)

s.substring(int i); // 区间 [i, end) 的 str

s.substring(int i, int j); // 区间 [i, j) 的 str

s.trim(); // Python strip(). 去掉前后的空格

StringBuilder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 初始化
StringBuilder s = new StringBuilder("hello");

// 输出
s.toString();

// 反转
s.reverse();

// 末尾添加
s.append();

// 替换
s.replace(i, j, str);
s.setChatAt(index, char);


Array 操作


数组基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 声明
String [] name = new String[5];

int [] age = new int[3]; // 分配 3 个
int [] age = {16, 17, 18}; // 或者直接写出 elements


// 存放数据
age[2] = 19;

// 添加
arr.add(val);

// Print elements !!
System.out.println( Arrays.toString(a) );

数组遍历

1
2
3
4
5
for (int n : age) {			// 遍历元素。仅适用于 Arr
/* ... */ }

// 如果 string 想用的话: 必须先转换成 CharArray
for (char c : s.toCharArray())

二维数组

1
int [][] matrix = new int[3][4];		// 3 row, 4 column

常用操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.Arrays;

int [] a = new int[10]; // 初始,全部为 0 !!

// 全部设为 1
Arrays.fill(a, 1);

// Length
int n = Arrays.length;

// 排序
Arrays.sort(a);

// 二分查找 20 的位置
Arrays.binarySearch(a, 20);

// 数组是否相等
Arrays.equals(a, b);

// Index of Array's element: 必须先转换成 ArrayList
Arrays.asList(arr).indexOf(element);

// List 转化 -- 结果: [[1, 2], [3, 4]]
Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4));



类型变换

Base conversion: https://stackoverflow.com/a/19607058

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// char to int
char c;
int n = c - '0';


// Binary string to int
int n = Integer.parseInt("1001", 2);


// String to int (两种)
int n = Integer.parseInt(s);
int n = Integer.valueOf(s);


// int to String
String s = Integer.toString(n);


// int to array of digits
int[] ans = Integer.toString(n).chars().map(c -> c-'0').toArray();



Sentence to Array of strings:

This can be accomplished just with split as it takes regex:

1
2
String s = "This is a sample sentence with []s.";
String[] words = s.split("\\W+");

This will give words as: {"this","is","a","sample","sentence", "s"}

The \\W+ will match all non-alphabetic characters occurring one or more times. So there is no need to replace.



其他操作


设置临界值

1
2
3
4
5
6
7
// Min & Max Int
int a = Integer.MIN_VALUE;
int b = Integer.MAX_VALUE;

// Min & Max Long
long a = Long.MIN_VALUE;
long b = Long.MAX_VALUE;

常用数学方法

1
2
3
4
5
6
7
8
9
10
11
// 绝对值
Math.abs(int);

// 最大
Math.max();

// 最小
Math.min();

// 平方
Math.pow(2, 4); // 2^4 = 16

Array List

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 初始化
ArrayList<Integer> a = new ArrayList<>();

// 添加
a.add(1);

// ArrayList to Array:
Object[] arr = a.toArray();

// Sort
Collections.sort(a);

// Reverse
Collections.reverse(a);

// Reversely add elements
a.add(0, element);

// Return 空列表
if(n == 0) return new ArrayList();

// 大小
len = a.size();

// Get value
a.get(index);

Linked List

1
2
3
4
5
6
7
// ListNode
ListNode dummy = new ListNode(0);
ListNode cur = dummy;

// 套娃初始化
LinkedList<List<Integer>> l = new LinkedList<List<Integer>>();


Queue

1
2
3
4
5
6
7
8
// 初始化
Queue<TreeNode> q = new LinkedList<>();

// 入队
q.offer(root);

// 出队
q.poll();

Deque

Deque = Double Ended Queue (can be accessed by both ends), organizes element in LIFO style

The documentation advise us to use the Deque interface which offers a more consistent API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 初始化
Deque<Integer> dq = new LinkedList<>();

// 队首添加
dq.addFirst(1);
dq.offerFirst(1);

// 队尾添加
dq.addLast(1);
dq.offerLast(1);
dq.offer(1);

// 队首出队
dq.poll();
dq.pollFirst();

// 队尾出队
dq.pollLast();

HashMap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 初始化
Map<Integer, Integer> d = new HashMap<>();

// Put
d.put(key, value);

// Get Key's Value
d.get(key);

// If has Key
d.containsKey(key);

// If has Value
d.containsValue(value);

Stack

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 初始化
Stack<Character> s = new Stack<>();

// 入栈
s.add(c);
s.push(c);

// 出栈
s.pop();

// 判空
s.isEmpty();

// 数量
s.size();

// 查看最新添加的元素 (peek不删除元素)
s.peek();