想把自己刷题过程中一些,使用经典方法、思想的题记录下来。

一、集合

1 数组

1.1 新建数组

1
int[] a = new int[5];

1.2 数组大小

1
a.length

1.3 数组排序

1
2
Arrays.sort(a);//升序排列数组
Arrays.sort(a, 1, 5);//对index从1到4的元素做升序排列

自定义排序规则:

1
2
3
4
5
6
7
int[][] b = new int[4][2];
Arrays.sort(b, new Comparator<int[]>(){
@Override
public int compare(int[] o1, int[] o2){
return o1[0]==o2[0] ? o1[1]-o2[1] : o2[0]-o1[0];
}
})

1.4 数组复制

1
Arrays.copyOfRange(array,0,array.length);//左闭右开

2 List

2.1 新建List

1
List<Integer> nums = new ArrayList<>();

2.2 添加元素

1
2
nums.add(3);//尾部添加3
nums.add(0,3);//index=0处,添加3

2.3 获取元素

1
int n = nums.get(0);//index

2.4 删除元素

1
nums.remove(0);//删除第一个元素

2.5 是否为空

1
nums.isEmpty()

2.6 是否包含元素

1
nums.contains(3);

2.7 列表长度

1
nums.size()

2.8 清空列表

1
nums.clear()

2.9 反转列表

1
2
List<Integer> nums = new ArrayList<>();
Collections.reverse(nums);

2.10 List转为Array数组

1
2
3
4
5
6
7
List<String> strList = new ArrayList<String>();
strList.add("list");
strList.add("to");
strList.add("array");
String[] strArray = new String[strList.size()];
strList.toArray(strArray);//括号里的数组,为想要的结果数组的形式
strList.toArray(new String[strList.size()]);

2.11 Array数组转为List

1
2
String[] strArray = new String[]{"array", "to", "list"};
List<String> strList = Arrays.asList(strArray);

2.12 List合并

1
list1.addAll(list2);

2.13 List排序

1
2
3
4
5
6
7
8
Collection.sort(list);//从小到大
Collection.sort(list,Collections.reverseOrder());//从大到小
//自定义
Collection.sort(list,new Comparator<Point>(){
public int compare(Point a,Point b){
return a.get(x)==b.get(x)?a.get(y)-b.get(y):a.get(x)-b.get(x);
}
});

3 Set

3.1 新建集合

1
Set<Integer> set = new HashSet<>();

3.1 添加元素

1
set.add(1);

3.2 删除元素

1
set.remove(2);//这里只能删除元素,无index

3.3 是否包含

1
set.contains(5);

3.4 遍历

1
2
3
for(Integer i:set){
System.out.println();
}

4 HashMap

4.1 新建HashMap

1
HashMap<String, String> map = new HashMap<>();

4.2 添加键值对

1
map.put("zhang", "31");

4.3 获取键值对

1
map.get("zhang");

4.4 是否包含

1
2
map.containsKey("zhang");
map.containsValue("31");

4.5 删除键值对

1
2
map.remove("zhang");
map.remove("zhang","31");//Removes the entry for the specified key only if it is currently mapped to the specified value.

4.6 返回key Set

1
map.keySet();

4.7 返回value Colleciton

1
map.values();

4.8 遍历HashMap

1
2
3
4
Map<String, String> map = new HashMap<String, String>();
for (String key : map.keySet()) {
map.get(key);
}

4.9 getOrDefault

1
map.put(str, map.getOrDefault(str, 0) + 1);//如果存在就+1,不存在就为0

5 Stack

官方不推荐使用Stack类,推荐使用Deque

5.1 新建栈

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

5.2 添加元素

1
stack.push(3);

5.3 弹出元素

1
stack.pop();

5.4 获取栈顶元素

1
stack.peek();

6 queue

6.1 新建队列

1
ArrayDeque<Integer> deque = new ArrayDeque<>();

6.2 添加元素

1
2
deque.add(3);//尾部添加3
deque.addFirst(3);//头部添加3

6.3 获取元素

1
2
duque.getFirst();
deque.getLast();

6.4 获取并删除

1
2
deque.pollFirst();//出队
deque.pollLast();//弹栈

7 PriorityQueue

7.1 新建堆

1
PriorityQueue<Integer> pq = new PriorityQueue<>();

7.2 添加元素

1
pq.add(3);

7.3 获取元素

1
2
pq.peek();//不删除元素
pq.poll();//删除元素

7.4 删除元素

1
pq.remove(3);

7.5 转为数组

1
pq.toArray();

8 Deque

双端队列,控制每一端元素的进出,可以实现栈或者队列。

8.1 实例化

1
2
Deque<Integer> deque = mew ArrayDeque<>();
Deque<Integer> deque = enw LinkedList<>();

8.2 添加元素到队尾

1
2
addLast(E e) 
offerLast(E e)

8.3 取队尾元素并删除

1
2
E removeLast()
E pollLast()

8.4 取队尾元素并不删除

1
2
E getLast()
E peekLast()

8.5 添加元素到队首

1
2
addFirst(E e)
offerFirst(E e)

8.6 取队首元素并删除

1
2
E removeFirst()
E pollFirst()

8.7 取队首元素并不删除

1
2
E getFirst()
E peekFirst()

二、杂项

1 三元运算符

1
int a = node==null ? 0 : node.val;

2 Math

1
2
3
4
int a = Math.max(2,3);
int a = Math.sqrt(4);//开根号
int a = Math.abs(-1);//取绝对值
int a = Math.pow(2,3);//2的3次方

3 最大值、最小值表示

1
2
int a = Integer.MAX_VALUE
int b = Integer.MIN_VALUE

4 Arrays

1
2
3
Arrays.sort(a);//排序int[] a
Arrays.fill(a,Integer.MAX_VALUE);//快速向a中填充最大值
Arrays.copyOf(nums,nums.length);//复制数组

5 位运算

位运算后,需要重新赋值

1
2
3
4
5
6
a = a & 1;//判断a是不是基数
a = a | 1;
a = ~a;
a = a ^ 1;//异或运算
a = a << 1;//左移一位
a = a >> 1;//右移一位

6 转换

6.1 char转int

1
2
char ch = 'x';
int x = 'x' - 'a';

6.2 int转char

1
char ch = (char)(num + 'a');

6.3 char转String

1
String s = String.valueOf(ch);

6.4 char[]转Stirng

1
2
3
4
char[] chs = new char[n];
String s = new String(chs);
//或者
String s = String.valueOf(chs)

6.5 String转char

1
s.charAt(i);

6.6 String转char[]

1
s.toCharArray()

7 flag取反

1
flag = !flag;

8 随机数

1
2
Random rand = new Random();
rand.nextInt(n);//[0,n)