Grammar BufferedReader (比较快) 1 2 3 4 5 6 7 8 9 10 import java.io.*;public class Solution { private static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); public static void main (String[] args) throws IOException { String[] line = reader.nextLine().split(); int num = Integer.parseInt(line[0 ]); } }
Scanner 输入字符串 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import java.util.*;public class Solution { private static Scanner scanner = new Scanner(System.in); public static void main (String[] args) { System.out.print("Fuck you." ); String input = scanner.nextLine(); System.out.println("input = " + input); System.out.printf("%d" , 1 ); } }
1 2 3 4 5 String input = scanner.nextLine(); int num = Integer.parseInt(input);int num = Scanner.nextInt(); int num = Integer.parseInt(Scanner.next())
Convert Integer to String 1 2 3 4 5 6 7 str = Integer.toString(num); str = Integer.toBinaryString(num); str = Integer.toHexString(num); str = Integer.toOctalString(num); str = Integer.toString(num, radix=10 );
Convert Double to String 1 2 3 4 5 6 7 str = Double.toString(num); str = Double.toBinaryString(num); str = Double.toHexString(num); str = Double.toOctalString(num); str = Double.toString(num, radix=10 );
String Methods 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 char [] charArray = {'0' , 'f' , 'u' };String str = new String(charArray); length = str.length(); char a = str.charAt(0 );str.substring(0 , str.length()-1 ); str = new StringBuilder(str).reverse().toString(); String.format("%d" , num); String.format("%.1f" , num); String[] splited = str.split(" " ); String trimed = str.trim(); str.replace(char oldChar, char newChar); str.repalceAll("^\+" , "" ); str = "fuck" ; str.compareTo("fuck" ); str.compareToIgnoreCase("FUCk" ); str.endsWith("ck" ); str.startsWith("wh" ); str.equalsIgnoreCase("Fuck" ); indexOf(char chr); indexOf(char chr, int fromIndex); indexOf(String str, int fromIndex); lastIndexOf(char chr); str.regionMatches(int offset, String otherString, int offset_hat, int length); str.concat("you" )
Arrays and ArrayList Java中的array是在heap中创建的,每个array的元素都会被自动初始化,该值根据不同的类型而定。
int - 初始化为0
boolean - 初始化为false
double - 初始化为0.0
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 int [] nums = {1 , 3 , 3 , 2 , 5 };int [] nums = new nums[6 ];int [] nums = new nums[]{1 , 3 , 4 , 5 };for (int i = 0 ; i < nums.length; i++) System.out.println(nums[i]); for (int i: nums) System.out.println(i); len = nums.length; int [] nums = new int [5 ];Arrays.fill(nums, Integer.MAX_VALUE); int [][] nums = new int [5 ][5 ];for (int [] row : nums) Arrays.fill(row, Integer.MAX_VALUE); import java.util.ArrayList;ArrayList<Integer> arr = new ArrayList<Integer>(); List<String> tmp = Arrays.asList("1" , "2" , "4" ); arr.add(i, obj); arr.add(obj); arr.remove((int )i); arr.remove(obj); arr.toArray();
Map的使用 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 Map<Character, Integer> map = new HashMap<>(); map.size() map.clear(); map.containsKey(); map.containsValue(); map.get(k); map.put(k, v); map.remove(k); map.isEmpty(); map.keySet(); map.put(key, map.getOrDefault(key, 0 )+1 );
Queue的使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Queue<Integer> queue = new LinkedList<>(); queue.offer(5 ); queue.poll(); queue.peek(); queue.size(); queue.isEmpty(); Queue<Integer> queue = new PriorityQueue<>((a,b) -> b-a);
Stack 1 2 3 4 5 6 7 Stack<Integer> st = new Stack<>(); st.peek(); st.push(); st.pop(); st.isEmpty();
array用Arrays.sort(),如果是普通的基本数据类型,则没有lambda表达式。
List 数组 1 2 3 4 5 6 7 8 9 10 11 12 13 List<Integer>[] arr = new ArrayList[10 ]; Arrays.sort(arr, new Comparator<List<Integer>>() { @Override public int compare (List<Integer> a, List<Integer>) { return a.size() - b.size(); } }); for (i=0 ;i<arr.lengh;i++) arr[i] = new ArrayList<>();
Arrays 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 int [] arr = new int [10 ];for (int i = 0 ; i < 10 ; i++) arr[i] = i;Arrays.sort(arr); Collections.sort(arr, Collections.reverseOrder()); Arrays.sort(lists, new Comparator<List<Integer>>() { @Override public int compare (List<Integer> a1, List<Integer> a2) { return -a1.get(0 ) + a2.get(0 ); } }); Arrays.binarySearch(arr, 10 ); Arrays.binarySearch(arr, fromIndex, toIndex, key); int [] copy = Arrays.copyOfRange(arr, 0 , 3 );Arrays.equals(arr, copy); Arrays.deepEquals(arr, copy); System.out.println(Arrays.toString(arr));
Functional Programming in Java (OJ系统中不一定快) 1 2 String[] strings = Array.stream(arr).map(x->String.valueOf(x)).toArray(String[]::new );
以上代码会报错, 这是由于Java实现了IntStream, LongStream, DoubleStream三个基本类型的stream,这些基本类型的stream有更好的性能,但是需要注意的是这些基本类型的stream的map函数只支持自身类型->自身类型(int->int/long->long/double->double)的映射,如果需要进行String类型的转换那么我们需要使用mapToObj()函数。
三个基本类型的Stream相互转化的函数为mapToDouble(), mapToInt(), mapToLong().
应当优先使用基本类型的stream
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 30 31 32 33 34 35 36 37 38 39 Stream<Integer> stream = Arrays.stream(arr); Stream<Integer> stream = list.stream(); arr = Arrays.stream(arr).map(x->x*2 ).toArray(); String[] strings = Array.stream(arr).mapToObj(x->String.valueOf(x)).toArray(String[]::new ); String[] strings = Array.stream(arr).mapToObj(x->String.valueOf(x)).toArray(n->new String[n]); arr = Arrays.stream(arr).filter(x->x>10 ).toArray(); String[] strings = list.stream().filter(x->x>10 ).toArray(String[]::new ); int sum = Arrays.stream(arr).sum(); int sum = Arrays.stream(arr).reduce(0 , (a,b)->a+b);Arrays.stream(arr).forEach(x->System.out.println(x)); IntStream stream = IntStream.of(1 , 2 , 3 ); IntStream range = IntStream.range(1 , 10 ); IntStream rangeClosed = IntStream.rangeClosed(1 , 10 ); IntStream infinite = IntStream.iterate(1 , operand->oprand + 2 ); int [] arr = new int []{1 , 2 , 4 , -1 };String[] strs = new String[]{"what" , "the" , "fuck" }; int max = Arrays.stream(arr).max().orElse(Integer.MIN_VALUE);int min = Arrays.stream(arr).min().orElse(Integer.MAX_VALUE);int sum = Arrays.stream(arr).sum().orElse(0 );String max = Arrays.stream(strs).max((a,b)->a.compareTo(b)).orElse("" ); String sum = Arrays.stream(strs).reduce("" , (a,b)->a.concate(b)); int max = Arrays.stream(arr).reduce(Integer.MIN_VALUE, Math::max);