字符串
String 存放最终结果,StringBuilder用来拼接
String
声明
String s = "abcdef";String s1 = new String(s);char[] chars = s.toCharArray();String s2 = new String(chars);String s3 = new String(chars, offset, count)截取[offset, offset + count)String s4 = String.valueOf(chars);
常用API
charAt(i)返回i位置的字符charlength()返回字符串长度subString(beg, end)返回[beg, end)的子串subString(beg)返回[beg, s.length())的子串indexOf(str)返回str出现的第一个位置;没找到返回-1lastIndexOf(str)返回str最后出现的位置;没找到返回-1startsWith(prefix)判断字符串是否以prefix为前缀开始; 返回true或false- endsWith(suffix) 判断字符串是否以
suffix为后缀结束;返回true或false replace(oldStr, newStr)返回新字符串,oldStr全部被替换为newStrtoCharArray()返回一个char[]trim()返回新字符串,取出字符串的首位空格。==说法不准确==split(regex)返回一个String[],根据[[正则表达式]]regex来处理toLowerCase()将字符串的所有字母转换为小写toUpperCase()将字符串的所有字母转换为大写String.valueOf(data)将其他类型的数据转变为字符串
StringBuilder
声明
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder(str);
常用API
charAt(i)length()append(str)将str拼接到sb后边delete(start, end)删除索引为[start, end)的字符串deleteCharAt(i)删除索引为i的字符reverse()反转sbtoString()
集合框架
List
ArrayList底层是一个动态扩容的数组,适合查找元素。扩容的时间复杂度为O(N) LinkedList底层是一个双向链表,可作为双向队列和栈来使用。适合增删元素
List<Integer> arrayList = new ArrayList<>();
List<Integer> arraylist = new ArrayList<>(initialCapacity);
List<Integer> linkedList = new LinkedList<>();
size()isEmpty()clear()add(e)链表末尾添加元素e;成功返回trueadd(i, e)链表i位置添加元素e;voidremove(e)删除元素e;成功返回trueremove(i)删除i位置的元素;并返回该元素the element previously at the specified positionget(i)返回链表i位置的元素eset(i, e)将i位置的元素更改为元素e;返回the element previously at the specified positionindexOf(e)返回第一次出现e的索引;不存在返回-1lastIndexOf(e)返回最后一次出现e的索引;不存在返回-1toArray()返回数组toString()
ArrayList
LinkedList
Stack
使用Deque来代替Stack,因为Stack继承自<vector>,不推荐使用。
Deque<Integer> stack = new LinkedList<>();
size()返回栈中元素个数isEmpty()栈空返回true;栈非空返回falseclear()清空push(e)栈顶插入元素;空间不足throws IllegalStateExceptionpop()删除栈顶元素并返回该元素;throws NoSuchElementExceptionpeek()查看栈顶元素,并返回该元素;栈空返回null
Queue
构造
Queue<Integer> queue = new LinkedList<>();
size()返回队列中元素个数isEmpty()队空返回true;队非空返回falseclear()清空offer(e)队尾插入元素e,成功返回true;失败返回falsepoll()删除队尾元素并返回该元素; 队空返回nullpeek()查看队头元素,并返回该元素;队空返回null
Deque
构造
Deque<Integer> deque = new LinkedList<>();
清爽版
size()返回队列中元素个数isEmpty()队空返回true;队非空返回falseclear()清空offFirst(e)队头插入元素e;空间不足返回falseoffLast(e)队尾插入元素e;空间不足返回falsepollFirst()队头删除元素,并返回该元素; 队空返回nullpollLast()队尾删除元素,并返回该元素; 队空返回nullpeekFirst()查看队头元素,并返回该元素;队空返回nullpeekLast()查看队尾元素,并返回该元素;队空返回null
当栈用
push(e)空间不足throws IllegalStateExceptionpop()栈空throws NoSuchElementExceptionpeek()栈空返回null当队列用offer()空间不足返回falsepoll()队空返回nullpeek()队空返回null
PriorityQueue
大根堆/小根堆
默认小根堆
Queue<Integer> pq = new PriorityQueue<>();
大根堆
Queue<Integer> pq = new PriorityQueue<>((a,b) -> b - a);
-
size() -
isEmpty() -
clear() -
offer(e)将元素e插入优先队列;空间不足返回flase -
poll()删除优先队列头元素,并返回该元素; 队空返回null -
peek()查看优先队列头元素,并返回该元素;队空返回null -
contains(e)
Set
Set<Integer> set = new HashSet<>();
size()isEmpty()clear()add(e)集合添加元素econtains(e)存在e返回true;不存在返回falseremove(e)集合删除元素e,返回true;集合中不存在e返回false
扩展TreeSet,比HashSet多了排序
Map
Map<Integer, Integer> map = new HashMap<>();
size()isEmpty()put(k,v)Map中加入键值对<k,v>get(k)返回k对应的v;不存在返回nullremove(k)删除k对应的vgerOrDefault(k, 0)返回k对应的v,若不存在该k,则返回0containsKey(k)Map中存在k返回true;不存在返回falsecontainsValue(v)Map中存在v返回true;不存在返回falsekeySet()返会一个包含Map中所有Key的SetentrySet()返回一个包含所有<k,v>映射的Set
遍历
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {}
工具类
Collections
java.util.Collections
Collections.sort(list);从小到大排序Collections.sort(list, (a, b) -> b - a);从大到小排序Collections.reverse(list);反转list中的元素Colletcions.swap(list, i, j);交换swap中i和j处的元素Collections.copy(list1, list2);将list2中的元素拷贝到list1,注意确保list1的空间足够Collections.replaceAll(list, oldV, newVal);将list中的oldVal都替换为newValCollections.max(list);返回list中最大元素Collections.frequency(list, e);返回list中e出现的次数
Arrays
现有一数组int[] arr = new int[10];
Arrays.sort();比较器int[] newA = Arrays.copyOf(arr, 10);拷贝Arrays.binarySearch(arr, x);二分查找x,并返回x对应的索引indexArrays.fill(arr, e); 用e来填充数组arrArrays.toString(arr);将arr变为字符串Arrays.equals(arr1, arr2);比较arr1和arr2的元素是否对应相等;返回true或falseArrays.asList(arr)数组转ListList<Integer> list = new ArrayList(Arrays.asList(arr));这样可以增删元素
比较器
数组排序
Integer[] arr = new Integer[10];
// 典型比较器写法
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return a - b; // 升序
// if: return正数, a - b > 0时, swap(a,b).
// else if: return负数 a - b < 0时,位置不变
// else:return 0,位置不变
//return b - a; // 降序
}
});
// 等价Lambda方式
Arrays.sort(arr, (a, b) -> a - b); // 升序
Arrays.sort(arr, (a, b) -> b - a); // 降序
==当a < b,若想要升序,我期待返回负数。== ==当a < b,若想降序,我期待返回正数。==
字符串比较
compareTo(String anotherString)按字典顺序比较两个字符串;返回两字符的差值(s > anotherSting返回正数,相等返回0,小于返回负数)compareToIgnoreCase(String anotherString)按字典顺序且不区分大小写比较两个字符串equals(String anotherString)判断两个字符串是否相等,返回true或falseequalsIgnoreCase(String str)不区分大小写。
集合排序
TreeSet<Integer> treeSet = new TreeSet<>((a, b) -> a - b);
Math
java.lang.Math
Math.min(a, b);取a,b的最小值Math.max(a, b);取a, b的最大值Math.sqrt(double d);求 d 的算术平方根(正平方根)Math.abs(a);求a 的绝对值Math.pow(double a, double b);求a^bMath.ceil(double x);向上取整Math.floor(double x);向下取整Math.round(double x);四舍五入取整Math.random();生成[0, 1)的随机数(double类型)int x = (int)Math.random() * b + 1生成[1, b]的随机数int x = (int)Math.random() * (b - a + 1) + a)生成[a, b]的随机数
Integer
Integer.parseInt(s);将字符串s解析为十进制数Integer.parseInt(s, radix);将字符串s解析为radix进制数