1 int 2 string 3 char 4 链表 5 栈 6 数组
7 list 8 map 9 queue 10 Math 11 运算 12 其他
1、int
(1)int转int数组:先转成String s="1234"; s.charAt(0)-‘0’;第n个数组
(2)NestedInteger.isInteger()是否是数字
2、string
(1)string比较:tmp.compareTo("25")<=0
(2)输入:[3,30,34,5,9]输出: 9534330 res = new StringBuilder();
Lambda: Arrays.stream(nums) .boxed().map(x -> x.toString()) .sorted((x, y) -> (y + x).compareTo(x + y)) .forEach(x -> res.append(x));
(3)反转StringBuffer sb = new StringBuffer();
StringBuffer sb_rev =new StringBuffer(sb).reverse();
(4)转数组char[] = String.toCharArray()
(5)split(":", -1) 和 split(":") 区别:如最后位是切割符,split(":") 不继续切分,split(":", -1) 继续切分
split(":") ["0370","7334"]
split(":", -1) ["0370","7334",""]
3、char
(1)char c = 2+‘a’
(2)是否字母或数字 Character.isLetterOrDigit(c )
(3)转小写Character.toLowerCase(c)
4、链表
(1)ListNode first = [1,2,3,4,5] first.next = [2,3,4,5]
(6)ListNode dum = new ListNode()
ListNode res = new ListNode(0, head);//?
5、栈
(1)Stack<Integer> stack = new Stack<Integer>(); stack.push/pop(ListNode.val); pop弹出栈顶
6、数组
(1)matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]. matrix[0].length =4 matrix.length =3
(2)int a[][] = new int[3][4]; //定义一个整型数组:3行4列
int row = a.length; //获取行数---3行
int col = a[0].length; //获取列数---4列
(3)int[] res = new int[];一定要指定size,不知道size的时候可以用ArrayList 代替,再遍历或转为数组
(4) int[] arr2 = Arrays.copyOf(arr1, 3); = {1, 2, 3};
int[] arr1 = {1, 2, 3, 4, 5};
(5)截取数组:Arrays.copyOfRange(res, 0, idx);比较数组Arrays.equals(str1, str2);
(6)数组排序:int [] nums; Arrays.sort(nums);
Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]); 按1,再按2排序
(7)按数字排列:Arrays.sort(strs, (x, y) -> (x + y).compareTo(y + x)); [3,30,34,5,9] :30,3,34,5,9
(8)数组复制到队列:String [] deData=data.split(","); Queue<String> q = new LinkedList<>();
Collections.addAll(q,deData);
(9)将nums2数组从下标0位置开始,拷贝到nums1数组中,从下标0位置开始,长度为len2+1
System.arraycopy(nums2, 0, nums1, 0, len2 + 1);
7、list
(1)ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i < list.size(); i++) res[i] = list.get(i);
或者:list.stream().mapToInt(Integer::intValue).toArray(); //性能不好
(2) linkList 有removeLast(),list木有
(3)linkedlist 有getFirst() poll()弹出头
(4)转数组:List<String> res = new LinkedList<>();
String[] aa = res.toArray(new String[cc.length-1]);
(5)list在头部添加 list.add(0,root.val);
int[][] = list.toArray(new int[list.size()][2]) 其中List<int[]> list = new ArrayList<>(len);
8、map
(1)map.getOrDefault(num, 0)比map.get(num),效率更高
getOrDefault:Map有这个key时,就用这个key值,没有就用默认值0
(2)hashmap效率低,不如array 1到26先放偶数,再放奇数
(3)map.containsKey(c)
(4)HashMap<String,List<String>> map = new HashMap<>() 变为List<List<String>>:
new ArrayList<List<String>>(map.values())
9、queue
(1)queue :peek()获取头
(2)PriorityQueue 特性,每次都peek,poll最小的那个
(3)q.remove(); //删除队首
(4)BlockingQueue<String> blockingQueue = new SynchronousQueue<>();
同步队列,没有容量,进去一个元素,必须等待取出来以后,才能再往里面放一个元素
10、Math
(1)Math.pow(x,y)函数求x的y次方 Math.pow(10, 3)=1000 (10, 2)=100
(2) Math.abs(a-b). 得绝对值
11、运算
(1)<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
-12 >>> 3 就是右移三位,前面补零,-12 的二进制为:1111 1111 1111 1111 1111 1111 1111 0100;为:0001 1111 1111 1111 1111 1111 1111 1110
(2) &运算:129&128.
129:10000001,128:10000000。高位开始比较得到,得10000000,即128.
12、其他
(1)、switch(val) {
case "+": stack.push(b + a); break;
default : stack.push(new Integer(val)); }
(17) 二分法找mid = l+(r-l+1)/2 34题