Java语言笔记
Java数据结构比Go多,很多数据结构(如优先级队列)Go都需要自己手写。所以使用一段时间Go后,刷题又转为Java了。
1. 基本库类
- Integer最大值最小值:
Integer.MAX_VALUE
Integer.MIN_VALUE
-
Math类:
- Math.max(),Math.min()
-
数组排序:
Arrays.sort(nums)- 自定义排序器:只能对包装类型,比如Integer,int[],使用lambda表达式:
Arrays.sort(nums,(a,b)->b-a) - 一般情况下,自定义排序器用
a-b即可。但对于某些极端的测试样例,a-b可能会溢出。所以,用a<b?-1:1更好 - 对于基本数据类型,用自定义排序(比如int[]):
Arrays.stream(nums).boxed().sorted((a,b)->{b-a}).mapToInt(i->i).toArray()(这里的boxed()是将stream转化为T的包装类型的stream)
-
显式类型转换:包装类.valueOf(),比如string转int,用
Integer.valueOf() -
list反转:
Collections.reverse(list)
2. 数据结构
-
列表List
- 常用方法:add(),remove(),get(),set(index,value)
- list转数组:
list.toArray(new int[size])需要声明数组的形式
-
队列Queue
- 实现类:LinkedList,ArrayDeque
- LinkedList对于add()无空值判断,而ArrayDeque有空值判断。
- 常见方法:offer(),peek(),remove(),poll()
-
双端队列Deque
- 实现类有ArrayDeque和LinkedList
- 接口:peekFirst,pollFirst,addFirst,peekLast,pollLast,addLast,栈接口:peek(=peekFirst),poll(=pollFirst),push(=addFirst)
-
优先级队列PriorityQueue
- 自定义排序:用Comparator的compare(a,b),a-b是默认的升序,b-a是降序。如大顶堆,就用b-a
// 大顶堆
PriorityQueue<Integer> queue=new PriorityQueue<>(new Comparator<Integer>(){
public int compare(int a,int b){
return b-a;
}
});
- 哈希表HashMap
- 添加:
put(key,value) - 获取元素:
get(key)或getOrDefault(key,defaultValue) - 删除:
remove(key),清空:clear() - 是否key存在:
containsKey(key) - 遍历:
keySet()用get(key),或
- 添加:
for(Map.Entry<K,V> e:map.entrySet()){
e.getKey()
e.getValue()
}
- 哈希集合HashSet
- 添加 add()
- 是否存在 contains()
- 删除 remove()
3. 字符串
-
常用操作:
- 遍历字符串:charAt()
- length():长度
- setCharAt(i,ch)
-
字符串不可变,涉及频繁的修改字符串,应使用StringBuilder(线程不安全,快)和StringBuffer(线程安全,慢)。方法主要有:
- append() 在尾部添加字符串
- deleteCharAt(i) 删除下标i
- toString() 转为字符串
-
String和char[]互相转化:
- String -> char[]:
String s; char[] arr=s.toCharArray() - char[] -> String:
char[] arr; String s=new String(arr)
- String -> char[]:
-
子串截取 substring(startIndex,endIndex)(endIndex不包括)

浙公网安备 33010602011771号