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
posted @ 2023-02-15 16:57  兑生  阅读(30)  评论(0)    收藏  举报  来源
Live2D