PrdLeetCode
lambda
Arrays.sort(arr,(a,b)->a-b); //升序 lambda表达式要非基本数据类型,一维就需要包装类
Arrays.sort(arr, new Comparator<int[]>(){
public int compare(int[] a, int[] b){
return a[0] - b[0];
}
});
Arrays.sort(arr,(a,b)->{ //二维
if(b[0] != a [0]){
return b[0] - a[0]; //降序
}else{
return a[1] - b[1];
}
});
类型转换
数组<–>List
//数组转List:
Arrays.asList(arr)
//List转数组:
list.toArray()
//二维
List<int[]> list = new ArrayList<>();
list.toArray(new int[list.size()][]);
字符串<–>数字
//字符串转换为数字
//这里的16表示十六进制,也可以是十进制或是其他进制(如果不写,这里默认是10进制)
int tranToNum = Integer.parseInt(str, 16);//如果是单个字符 c+"" 转字符串
//数字串转化为字符串
//方法一:通过包装类来实现
String tranToStr = String.valueOf(num);
//方法二:直接通过空字符串+数字的形式转换为字符串
String str= ""+num;
//方法三:强制类型转换
String str= (String)num;
数组/字符串 复制截取函数
//1、数组复制:Arrays.copyOf(原数组,新数组的长度);
//Arrays.copyOf()方法内部其实调用了System.arraycopy()方法
int[] arr = new int[]{1,2,3,4,5};
int[] arr1 = Arrays.copyOf(arr,arr.length);
//遍历arr1输出:1,2,3,4,5
int[] arr1 = Arrays.copyOf(arr,2);
//遍历arr1输出:1,2
//2、数组复制:Arrays.copyOfRange(原数组,fromIndex,toIndex);
//fromIndex:原数组开始复制索引位置(包括)
//toIndex:原数组最后复制索引位置(不包括)
int[] arr = new int[]{1,2,3,4,5,6,7,8};
int[] arr1 = Arrays.copyOfRange(arr,2,6);
//遍历arr1输出:3,4,5,6
//3、数组复制:System.arraycopy(src,srcPos,dest,destPos,length);
//src:原数组, srcPos:从原数组的起始位置, dest:目标数组
//destPos:目标数组的起始位置, length:要copy的长度
int[] arr = {1,2,3,4,5};
int[] arr1 = new int[arr.length];
System.arraycopy(arr,1,arr1,1,3);
//遍历arr1输出:0,2,3,4,0
//substring()的作用就是截取父字符串的某一部分
//从beginIndex开始取,到endIndex结束,从0开始数,其中不包括endIndex位置的字符
String test = "Hello World !";
String subTest1 = test.substring(0,3);
//subTest1:Hel
常用容器方法
Stack只有入栈和出栈的操作:
在Java中,我们用Deque可以实现Stack的功能:
把元素压栈:push(E)/addFirst(E);
把栈顶的元素“弹出”:pop(E)/removeFirst();
取栈顶元素但不弹出:peek(E)/peekFirst()。
为什么Java的集合类没有单独的Stack接口呢?因为有个遗留类名字就叫Stack,出于兼容性考虑,所以没办法创建Stack接口,只能用Deque接口来“模拟”一个Stack了。
Deque是一个接口,它的实现类有ArrayDeque和LinkedList。
Deque d2 = new LinkedList<>();
当我们把Deque作为Stack使用时,注意只调用push()/pop()/peek()方法,不要调用addFirst()/removeFirst()/peekFirst()方法,这样代码更加清晰。
Queue
Queue实际上是实现了一个先进先出(FIFO:First In First Out)的有序表。LinkedList / ArrayDeque实现。定义了以下方法:
int size():获取队列长度;
boolean add(E)/boolean offer(E):添加元素到队尾;
E remove()/E poll():获取队首元素并从队列中删除;
E element()/E peek():获取队首元素但并不从队列中删除。
注意到添加、删除和获取队列元素总是有两个方法,这是因为在添加或获取元素失败时,这两个方法的行为是不同的。
ArrayList的常用方法:
方法名 | 说明 |
---|---|
boolean add(Object o) | 在列表的末尾顺序添加元素,起始索引位置从0开始 |
void add(int index,Object o) | 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 |
int size() | 返回列表中的元素个数 |
Object get(int index) | 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 |
boolean contains(Object o) | 判断列表中是否存在指定元素 |
boolean remove(Object o) | 从列表中删除元素 |
Object remove(int index) | 从列表中删除指定位置元素,起始索引位置从0开始 |
Object set(int index,Object o) | 指定下标进行修改其中的元素,返回的是修改前的对象 |
LinkedList的常用方法:
方法名 | 说明 |
---|---|
void addFirst(Object o) | 在列表的首部添加元素 |
void addLast(Object o) | 在列表的末尾添加元素 |
Object getFirst() | 返回列表中的第一个元素 |
Object getLast() | 返回列表中的最后一个元素 |
Object removeFirst() | 删除并返回列表中的第一个元素 |
Object removeLast() | 删除并返回列表中的最后一个元素 |
StringBuffer sb = new StringBuffer()
添加元素 append()
删除元素 deleteCharAt(sb.length() - 1)
转为String sb.toString()
substring()的作用就是截取父字符串的某一部分
public String substring(int beginIndex, int endIndex)
从beginIndex开始取,到endIndex结束,从0开始数,其中不包括endIndex位置的字符