算法 刷题常用API hiriki 2022-12-09 2022-12-09 数组 静态数组 1 2 3 4 5 String[] s = new String [3 ]; char [] b = new char []{'a' , 'b' }; int [][] c = new int [10 ][10 ];
.length
记得是属性而不是方法 arr.length
没有()
Arrays.sort 排序
1 2 3 4 5 Arrays.sort(int [] arr) Arrays.sort(int [] arr, int fromIndex, int toIndex) Arrays.sort(int [] arr, int fromIndex, int toIndex, 比较器); Arrays.sort(arr, (o1, o2) -> o2 - o1); Arrays.sort(arr, 0 , 3 , (o1, o2) -> o2 - o1);
Arrays.fill填满一个数组
1 2 int [] a = new int [5 ];Arrays.fill(a, 1 );
Arrays.copyOf / arr.clone() 复制一个数组
1 2 3 4 5 int [] a = new int [ 5 ];int [] newA = Array.copyOf(a, 5 );int [][] a = {{ 1 }, { 1 , 2 }, { 1 , 2 , 3 }, { 1 , 2 , 3 , 4 }, { 1 , 2 , 3 , 4 , 5 }}; int [][] newa = a.clone();
相等比较
1 System.out.println(Arrays.equals(arr1,arr2))
arr1.equals(arr2)比较的是两个对象的地址,不是里面的数,而Arrays.equals重写了equals,所以,这里能比较元素是否相等。
二分查找法找指定元素的索引值(下标)
1 2 int []arr = {10 ,20 ,30 ,40 ,50 };System.out.println(Arrays.binarySearch(arr, 20 ));
截取数组:copeOf和copeOfRange
1 2 3 4 int []arr = {10 ,20 ,30 ,40 ,50 }; int []arr1 = Arrays.copyOf(arr, 3 );int []arr = {10 ,20 ,30 ,40 ,50 };int []arr1 = Arrays.copyOfRange(arr,1 ,3 );
动态数组 1 2 3 List<Integer> array = new ArrayList <>(); List<Integer> list = new LinkedList <>(); List<List<Integer>> = new ArrayList <>();
List接口方法:get, size, add, remove, subList
1 2 3 4 5 6 7 .get(int index) .size() .add(E e) .add(int index, E e) .remove(int index) list.remove(list.size() - 1 ); .subList(int from, int to)
Collections.sort(list);
从小到大排序
Collections.sort(list, (o1, o2) -> o2 - o1);
从大到小排序, 第二个参数为一个比较器
Collections.reverse(list);
反转,倒序
Collections.max(list);
取最大值
Collections.min(list);
取最小值
StringBuilder 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 StringBuilder sb = new StringBuilder ();StringBuilder sb = StringBuilder(String str);.setCharAt(int index, char ch); .insert(int offset, String str); .deleteCharAt(int index); .delete(int start, int end); .reverse(); .toString(); append(String str); append(StringBuilder str); append(char [] str, int offset, int len);
Arrays 1 2 3 4 5 6 7 8 9 10 11 Arrays.sort(int [] arr) Arrays.sort(int [] arr, int fromIndex, int toIndex) Arrays.sort(arr, (o1, o2) -> o2 - o1); Arrays.sort(arr, fromIndex, toIndex, (o1, o2) -> o2 - o1); Arrays.asList(arr)
集合 map 方法:put, get, getOrDefault, containsKey, containsValue, keySet, values, isEmpty, size
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import java.util.HashMap; import java.util.Iterator; import java.util.Map;public class TestMap { public static void main (String[] args) { Map<String, String> map = new HashMap <String, String>(); map.put("1" , "a" ); map.put("2" , "b" ); map.put("3" , "c" ); for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey() + " = " + entry.getValue()); } for (Character key : map.keySet()) { } for (Integer value : map.values()) { } } }
Set 1 2 3 4 Set<Integer> set = new HashSet <>(); List<Integer> list = new ArrayList <>....; Set<Integer> set = new HashSet <>(list);
queue(队列) 方法:offer, poll, peek, isEmpty, size
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import java.util.Queue; import java.util.concurrent.LinkedBlockingQueue; public class TestQueue { public static void main (String[] args) { Queue<Integer> q = new LinkedBlockingQueue <Integer>(); Set<Integer> s = new HashSet <>(); Queue<Integer> q = new LinkedList <>(s); for (int i = 0 ; i < 5 ; i++) { q.offer(i); } System.out.println("-------1-----" ); for (Integer x : q) { System.out.println(x); } System.out.println("-------2-----" ); while (q.peek() != null ) { System.out.println(q.poll()); } } }
Stack(栈) 方法:push, pop, peek, isEmpty, size
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import java.util.Stack; public class TestStack { public static void main (String[] args) { Stack<Integer> s = new Stack <Integer>(); for (int i = 0 ; i < 10 ; i++) { s.push(i); } for (Integer x : s) { System.out.println(x); } System.out.println("------1-----" ); while (!s.isEmpty()) { System.out.println(s.pop()); } System.out.println("------2-----" ); } }
Deque(双端队列)
addFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则引发异常。
addLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则引发异常。
offerFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则返回false。
offerLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则返回false。
getFirst() - 返回双端队列的第一个元素。如果双端队列为空,则引发异常。
getLast() - 返回双端队列的最后一个元素。如果双端队列为空,则引发异常。
peekFirst() - 返回双端队列的第一个元素。如果双端队列为空,则返回null。
peekLast() - 返回双端队列的最后一个元素。如果双端队列为空,则返回null。
removeFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则引发异常。
removeLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则引发异常。
pollFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则返回null。
pollLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则返回null。
双端队列作为堆栈数据结构 Java Collections框架的Stack类提供了堆栈的实现。
但是,建议Deque用作堆栈而不是Stack类 。这是因为Stack的方法是同步的。
以下是Deque接口提供的用于实现堆栈的方法:
push() - 在双端队列的开头添加元素
pop() - 从双端队列的开头删除元素
peek() - 从双端队列的开头返回一个元素
PriorityQueue (优先级队列) 1 2 3 4 5 6 7 Queue<Integer> minH = new PriorityQueue <>((i1, i2) -> i1 - i2); Queue<Integer> minH = new PriorityQueue <>(100 ); Queue<Integer> maxH = new PriorityQueue <>((i1, i2) -> i2 - i1); Queue<Integer> maxH = new PriorityQueue <>(100 , (i1, i2) -> i2 - i1);
add() - 将指定的元素插入队列。如果队列已满,则会引发异常
offer() - 将指定的元素插入队列。如果队列已满,则返回false
peek()方法。返回队列的头部元素
remove() - 从队列中删除指定的元素
poll() - 返回并删除队列的开头
size() - 返回优先级队列的长度