Integer. valueOf()方法的作用
Integer. valueOf()可以将基本类型int转换为包装类型Integer,或者将String转换成Integer,String如果为Null或“”都会报错
String.valueOf()
将**转为字符串
Integer.parseInt用法
pareInt(String s)
将字符串s转换为十进制的数字,默认为十进制
public static void main(String[] args) {
int num=Integer.parseInt("100");
System.out.println(num);
}
同样的,Double.parseDouble(String s)…
getOrDefault()方法的使用
1.getOrDefault(key,default)
作用:如果存在相应的key则返回其对应的value,否则返回给定的默认值。
2.key的值相同,使value的值加一。比如需要统计一个字符串中所含的字母及对应字母的个数。
方法:
(1)定义一个哈希表hash
(2)hash.put(c,hash.getOrDefault(c,0)+1); //若没有就是0,若有就是原有值增一。
3.比较两个哈希表中key对应的value值大小:如果其中一个哈希表中不存在某个key,那么两个hash表如何比较。
方法:
hash1.getOrDefault(c,0) < hash2.getOrDefault(c,0) //如果两个哈希表都有某个key值,那么他们比较的就是其中value的大小,若其中一个哈希表不存在某个key值,那么比较的就是其中的默认值。
Map的一些用法
**keySet()**方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
PriorityQueue优先级队列用法
用法
先说结论,JAVA中默认是小根堆,即小的在堆顶(poll时小的出去)
接下来看下默认的最小堆写法
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2){
return o1 < o2 ? -1 : 1; // 最小优先队列,直接 return o1.compareTo(o2);
// 最大优先队列,则反过来 return o2.compareTo(o1);
}
});
compare含义
compare(Integer o1, Integer o2)
一定要记住o1是待插元素,o2是最后一个非叶子节点,当compare()返回的值<0时入队,>0时不入队
小根堆:o1若要入队,则o1<o2,同时compare需要返回负的,即o1.compareTo(o2)
大根堆:o1若要入队,则o1>o2,同时compare需要返回负的,即o2.compareTo(o1)
lambda表达式写法
大括号
PriorityQueue<Integer> queue =
new PriorityQueue<Integer>((Integer o1, Integer o2)->{
return o1 < o2 ? -1 : 1;
});
省略大括号
PriorityQueue<Integer> queue =
new PriorityQueue<Integer>((Integer o1, Integer o2)-> o1 - o2);
省略变量类型
PriorityQueue<Integer> queue = new PriorityQueue<Integer>((o1, o2)-> o1 - o2);
具体场景
TopK问题:
一、找海量数据中最大的K个
构造小根堆,堆顶为最小数,不断入队,当队列数大于K时,将最小的堆顶弹出,最后剩下的就是K个最大数
二、数组中最小的K个
构造最大堆,堆顶为最大数,不断入队,当队列数小于K时,将最大的堆顶弹出,最后剩下的就是K个最小数
二叉树的定义
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(){}
TreeNode(int val){this.val = val;}
TreeNode(int val,TreeNode left,TreeNode right){
this.val = val;
this.left = left;
this.right = right;
}
}
链表的定义
class ListNode{
int val;
ListNode next;
// 节点的构造函数(无参)
public ListNode() {
}
// 节点的构造函数(有一个参数)
public ListNode(int val) {
this.val = val;
}
// 节点的构造函数(有两个参数)
ListNode(int val,ListNode next){
this.val = val;
this.next = next;
}
}
java提供的反转List Collections.reverse(list);
List<String> list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
System.out.println("反转之前:"+list );
Collections.reverse(list);
System.out.println("反转之后:"+list );
反转字符串的类StringBuffer
StringBuffer stringBuffer=new StringBuffer("abc");
stringBuffer.reverse();
System.out.println("反转之后:"+stringBuffer);
获取List中存放的最后一个元素
public class ListUtil {
/**
\* 获取list中存放的最后一个元素
\* @param list
\* @param <T>
\* @return
*/
public static <T> T getLastElement(List<T> list) {
return list.get(list.size() - 1);
}
}
方法1.使用.arraycopy方法——数组截取
使用方法:arraycopy(原数组名称,原数组起始下标,目标数组名称,目标数组起始下标,截取长度)
举例:
1.说明:数组arr1是原数组,数组arr2是目标数组,需要把数组arr2的前三个数赋值给数组arr1。
2.补充:可以从任意位置赋值。
System.arraycopy(arr2,0,arr1,0,3);
方法2. 使用 java.util.Arrays.copyOf方法——数组截取
**使用方法:java.util.Arrays.copyOf(原数组名称,新数组长度);
举例:
1.说明:数组arr1是原数组,数组arr2是新数组,需要把原数组arr1的前三个数赋值重新赋值给新数组arr2.
2.注意事项:
只能把原数组中的一部分全部定义一个新的数组。
int arr2[]=java.util.Arrays.copyOf(arr1,3);
一个字符串中中的数字分解成整型数字
'9’-‘0’,9的码为48+9,57,这两个字符减去就等于减去了他们的码,所以57-48等于int类型9。利用这个机制,你可以从一个字符串中中的数字分解成整型数字。char类型说是存储一个字符,其实是存储字符的ASC(类型是int)码。
比如:String str = numString[digits.charAt(num) - ‘0’];
digits = “23”;
digits.charAt(num) - ‘0’ = 2
取数组中间元素的位置
首先取数组中间元素的位置,不难写出int mid = (left + right) / 2;
,这么写其实有一个问题,就是数值越界,例如left和right都是最大int,这么操作就越界了,在二分法 (opens new window)中尤其需要注意!
所以可以这么写:int mid = left + ((right - left) / 2);
Deque
详细看这篇博客https://blog.csdn.net/devnn/article/details/82716447
将String字符串转为char[]:
str.toCharArray()