Java算法題常用函數
String 字符串
-
charAt(int index)方法用於返回指定索引處的字符。索引範圍為從 0 到 length() - 1。 -
length()方法用於返回字符串的長度。空字符串的長度返回 0。 -
將String字符串轉化成char數組
char[] chars = string.toCharArray(); -
char數組轉String
new String (charArray); // charArray => char[] charArray -
返回一個新字符串,它是此字符串的一個子字符串
String sub = str.substring(int start, int end) -
指定字符在此字符串中第一次出現處的索引
str.indexOf(int ch) -
刪除字符串前後的空白符
str.trim()
StringBuffer/StringBuilder
-
在使用 StringBuffer 類時,每次都會對 StringBuffer 對象本身進行操作,而不是生成新的對象,所以如果需要對字符串進行修改推薦使用 StringBuffer。
-
StringBuilder 類在 Java 5 中被提出,兩者最大不同在於 StringBuilder 的方法不是線程安全的(不能同步訪問)。
-
由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。
-
初始化
StringBuilder sb = new StringBuilder(length) -
返回長度(字符數)
sb.length() -
將指定的字符串追加到此字符序列
sb.append(String s) -
將此字符序列用其反轉形式取代
sb.reverse() -
返回一個新的
String,它包含此序列當前所包含的字符子序列sb.substring(int start, int end) -
轉換成String
String str = sb.toString();
Stack 棧
-
初始化
Stack<?> stack = new Stack(); -
判斷堆棧是否為空
stack.isEmpty() -
查看堆棧頂部的對象,但不從堆棧中移除它
stack.peek() -
移除堆棧頂部的對象,並作為此函數的值返回該對象
stack.pop() -
元素壓入堆棧頂部
stack.push() -
返回對象在堆棧中的位置,以 1 為基數
int pos = stack.search()
Array 數組
-
初始化長度為size的數組
int[] array = new int[size] -
數組長度
array.length -
數組的排序
Arrays.sort(array) -
二維int類型數組的排序按首個數字升序排序 (lambda表達式寫法)
Arrays.sort(array, (v1, v2) -> v1[0] - v2[0])ps: 匿名內部類寫法
Arrays.sort(array, new Comparator<int[]>() { @Override public int compare(int[] v1, int[] v2) { // 與 Lambda 表達式邏輯完全一致 return v1[0] - v2[0]; } }); -
當區間左端點相同的時候,按照右端點降序排序
Arrays.sort(intervals, (o1, o2) -> { if(o1[0] == o2[0]){ return o1[1] - o2[1]; } return o2[0] - o1[0]; }); -
用於一維數組的初始化或者填充
Arrays.fill(array, 1); -
複製新數組,並指定長度 (例: 將數組array複製一個新數組, 並指定長度為length)
int[] copy = Arrays.copyOf(array, length)
List 列表
-
以下情況使用 ArrayList :
-
頻繁訪問列表中的某一個元素(隨機訪問)。
-
只需要在列表末尾進行添加和刪除元素操作。
-
-
以下情況使用 LinkedList :
- 你需要通過循環迭代來訪問列表中的某些元素。
- 需要頻繁的在列表開頭、中間、末尾等位置進行添加和刪除元素操作。
-
初始化
List<T> list = new LinkedList<>(); List<T> list = new ArrayList<>(); -
列表的尾部插入指定元素
list.add(Object o); -
列表的尾部移除元素(一般用於dfs算法 進行回溯)
list.remove(list.size() - 1); //刪除最後一個元素 -
判斷集合中是否存在這個元素
list.contains(Object o); // 返回true 或 false -
將數組轉為List
List<String> names = Arrays.asList(new String[]{"zhangsan","li"});-
List轉為數組
T[] array = list.toArray();
-
-
集合排序
Collections.sort(list); // 返回值為void
Queue 隊列
-
初始化
Queue<Integer> queue = new LinkedList() -
添加元素
queue.offer(Object o); -
刪除隊列中的第一個元素
queue.poll(Object o); // 返回隊列的第一個元素 -
判斷是否為空
queue.isEmpty(); -
獲取隊列的大小
queue.size();
PriorityQueue 優先隊列
- 優先級隊列並不是隊列中所有的元素都是按照優先級排放的,只能保證出隊順序是按照優先級進行的
-
初始化
Queue<Integer> queue = new PriorityQueue<>((a, b) -> b - a);
Map/HashMap
-
Map是接口,HashMap是具體實現
-
HashMap 實現了 Map 接口,根據鍵的 HashCode 值存儲數據,具有很快的訪問速度,最多允許一條記錄的鍵為 null,不支持線程同步。
-
初始化
Map<T, T> map = new HashMap(); -
獲取指定鍵的值
map.get(Object o); -
添加一個映射
map.put(K key, V value) -
是否包含指定的key
containsKey(Object key) \\如果此映射包含指定鍵的映射關係,則返回 true -
是否包含指定的value
containsValue(Object value) \\如果此映射將一個或多個鍵映射到指定值,則返回 true -
Map遍歷
Map<String, Integer> map = new HashMap(); map.put("zhangsan",1); map.put("li",2); map.put("wangwu",2); for (Map.Entry<String, Integer> m: map.entrySet()) { System.out.println("姓名: "+m.getKey()+" 編號: "+m.getValue()); }
HashSet 集合
-
HashSet 基於 HashMap 來實現的,是一個不允許有重複元素的集合。
-
HashSet 允許有 null 值。
-
初始化
HashSet<T> set = new HashSet<>(); -
添加元素
set.add(Object o); -
判斷元素是否存在
set.contains(Object o); -
刪除元素
set.remove(Object o);\ -
計算元素數量
set.size() -
迭代
public class RunoobTest { public static void main(String[] args) { HashSet<String> sites = new HashSet<String>(); sites.add("Google"); sites.add("Runoob"); sites.add("Runoob"); // 重複的元素不會被添加 for (String i : sites) { System.out.println(i); } } }