LeetCode - Java常用函数与方法

# 1. 数组

一般题目给到的类型(如基本类型的数组int[],char[],double[]等)常常需要排序,反转,查找等操作。

int[] a = {1,4,6,2};

// init
Arrays.fill(a, 0); //全部初始化为0

// sort
void Arrays.sort(T[] a);
void Arrays.stream(a).boxed().sorted(Comparator.reverseOrder()).mapToInt(Integer::intValue).toArray(); // 降序

// find index with **sorted** array
int Arrays.binarySearch(T[] a, @Option int fromIndex, @Option int toIndex, T key);

// reverse
// 基本类型数组只能使用自定义函数    
public static void reverse(int[] arr) {
    int left = 0, right = arr.length - 1;
    while (left < right) {
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        left++;
        right--;
    }
}
// Stream 处理
// char[][] - > List<String>
List<String> list = Arrays.stream(char[][]).map(String::new).collect(Collectors.toList())int[] nums = {1, 2, 3, 4, 5};
// 过滤
int[] result = Arrays.stream(nums).filter(n -> n % 2 == 0) .toArray();
// 聚合
int sum = Arrays.stream(nums).sum(); 
int avg = Arrays.stream(nums).average(); 

// 数组转可操作集合(add/remove/clear)
Integer[] arr = {1, 2, 3};
List<Integer> list = new ArrayList<>(Arrays.asList(arr));
List<Integer> list = Arrays.stream(arr).collect(Collectors.toList());

int[] arr = {1, 2, 3};
List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());

# 2. 进制转换

// 10(int) -> 任意(String)
String Integer.toString(int n, int radix);
// 任意(String) - > 10(int)
int Integer.parseInt(String str, int radix); 

# 3. List

# 常用函数

List<T> list = new ArrayList<>();
void Collections.sort(list);
T[] array = list.toArray(new T[0]);
int list.indexOf(T);

Set<T> set = new HashSet<>(list);//去重

void reverse(List list)//反转
void shuffle(List list)//随机排序
void sort(List list)//按自然排序的升序排序
void sort(List list, Comparator c)//定制排序,由Comparator控制排序逻辑
void swap(List list, int i , int j)//交换两个索引位置的元素
void rotate(List list, int distance)//旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面

int binarySearch(List list, Object key)//对List进行二分查找,返回索引,注意List必须是有序的
int max(Collection coll)//根据元素的自然顺序,返回最大的元素。 类比int min(Collection coll)
int max(Collection coll, Comparator c)//根据定制排序,返回最大元素,排序规则由Comparatator类控制。类比int min(Collection coll, Comparator c)
void fill(List list, Object obj)//用指定的元素代替指定list中的所有元素
int frequency(Collection c, Object o)//统计元素出现次数
int indexOfSubList(List list, List target)//统计target在list中第一次出现的索引,找不到则返回-1,类比int lastIndexOfSubList(List source, list target)
boolean replaceAll(List list, Object oldVal, Object newVal)//用新元素替换旧元素

# Stream

class Person {
    private String name;
    private String phoneNumber;
     // getters and setters
}

List<Person> bookList = new ArrayList<>();
bookList.add(new Person("jack","18163138123"));
bookList.add(new Person("martin",null));
// 空指针异常
bookList.stream().collect(Collectors.toMap(Person::getName, Person::getPhoneNumber));

# 4. 字符串

# 常用转换:

// String -> char[]
String str = "tim";
char[] charArray = str.toCharArray();
// String -> String[]
String str = "tim";
String[] strArray = str.split("");

// char[] -> String
char[] charArray = {'t', 'i', 'm'};
String str = new String(charArray);

// String[] -> String
String[] strArray = {"t", "i", "m"};
String str = String.join("", strArray);

# 常见操作:

// 预处理
String trim(); // 去除字符串首尾的空格或其他空白字符(如制表符、换行符等)
// 转换
char[] toCharArray();
String[] split(String regex);
static String valueOf(primitive data type x)
// 定位
char charAt(int index);
int indexOf(int ch | String str);
int lastIndexOf(int ch | String str);
// 大小写
String toLowerCase();
String toUpperCase();
// 替换
String replace(char oldChar, char newChar)
String replaceAll(String regex,String replacement);
// 改写
String concat(String s);
String substring(int beginIndex, @Option int endIndex)
// 查找
boolean contains(CharSequence s);
boolean startsWith(String prefix, @Option int toffset)

# 进阶操作:

// 反转
StringBuilder sb = new StringBuilder(str);
String reversedStr = sb.reverse().toString();

// 排序
// String -> char[]
char[] cs = str.toCharArray();
// sort
Arrays.sort(cs);
// char[] -> String
str = new String(cs);