java算法 经验之谈
杂记
1. 集合类
👵 集合类实现 数据翻转
Collections.reverse(list);
👵
Arrays.fill (数组,初始下标,末尾下标(排除),初始化的值);
👵
Arrays.copyOf( T[ ], int length) : 数组拷贝,返回一个新数组 T[ ] 是原数组;
length是截取的长度(即要拷贝的长度)
👵
Arrays.sort(T[] a, Comparator<? super T> c) :java库里边的排序方法**
Arrays.sort(intervals,new Comparator<int[]>() {//比较器的定义
public int compare(int[] a,int[] b) {
return a[0]-b[0]; // 升序
}
});
// a 是一个 {int o1,int o2} 数组
// 0 是起始位置(包含) n 是末尾位置(不包含)
Arrays.sort(a, 0, n, (o1, o2) -> o1.r - o2.r);
👵
ArrayList.sort(Comparator.naturalOrder()) : 按照自然升序排序
ArrayList.sort(Comparator.reverseOrder()) : 按照降序排序
两者都是动态改变数组列表的元素顺序,并不会有1返回值
👵
List<E> subList(int fromIndex, int toIndex)
List.subList(左边界(包含),右边界(不包含))
返回此列表中指定的 fromIndex (包括)和 toIndex(不包含)之间的数据
👵
Arrays.fill(数组,某值) :将数组所有元素全部初始化成某值
Arrays.fill (数组,初始下标,末尾下标(排除),初始化的值);
🤗 注意:不能是二维数组
👵
HashMap.getOrDefault(Object key, V defaultValue)
有值则返回该键的映射值,未赋值则返回默认值
👵
HashSet: A.retainAll(B) : 取A B的并集重新赋给 A
常用api: add(), remove(), contains(), size(), iterator() 元素随机返回
👵
PriorityQueue 优先队列
可以用来实现小根堆,队头元素最小
👵 treeset 实现自定义类去重
TreeSet的去重与HashCode和equals无关
通过实现Comparable接口并重写 CompareTo方法实现自定义去重
//自定义类
static class Pair
{
int x;
int y;
public Pair(int x, int y)
{
super();
this.x = x;
this.y = y;
}
}
//返回0表示元素重复
//这里是 x y 都不能重复的比较器
TreeSet<Pair>() set = new TreeSet<>((o1,o2) -> {
if(o1.y - o2.y == 0)
return o1.x-o2.x;
else
return o1.y-o2.y;
})
2. String类
🐷
String.toCharArray() : 字符串转字符数组
🐷
s.substring(起始位置(包含),结束位置(不包含))
3. 杂
😋 判断缓冲区有无输入
public boolean hasNext() :有输入返回 true
😋 浮点型的比较
Double.compare(d1, d2);
Float.compare(f1, f2);
😋 无穷:0x3f3f3f3f
😋 参考资料

😤 BufferedWriter 不能直接输出 int 类型,得加 “” 或 转换成 String 类型
out.write(cnt + "");
🐷 打表时,内存能省就省
| 类型 | 表示状态 |
|---|---|
| boolean | 真、假 |
| byte | -128 ~ 127 |
| short | -32768 ~ 32767 |
| int | - 21亿 ~ 正 21亿 |
| long | -9 * 10^18 ~ 9 * 10 ^ 18 |

浙公网安备 33010602011771号