002-arithmetic-02

算法基础面试题(二)

数据范围

整数类型

byte:8 位,范围为 -128 到 127

short:16 位,范围为 -32,768 到 32,767 3万

int:32 位,范围为 -2^31 到 2^31-1 21亿, 4bytes,100w int占4M,1亿int 400M.

long:64 位,范围为 -2^63 到 2^63-1

4G内存可以表示340亿bits, 1G内存可以表示85亿bits

100w int占4M, 1亿int 400M.

1亿bytes 100M, 4亿bytes 400M。

1亿bits 12M,4亿bits 48M内存

浮点类型

float:32 位,范围为 IEEE 754 单精度浮点数表示的取值范围。4bytes,100w float占4M,1亿 400M

double:64 位,范围为 IEEE 754 双精度浮点数表示的取值范围。

字符类型

char:16 位 Unicode 字符,范围为 0 到 65,535。 6万

java中理论上一个字符占用两个字节

Unicode只是一个编码规范,目前实际实现的unicode编码只要有三种:UTF-8,UCS-2和UTF-16,三种unicode字符集之间可以按照规范进行转换。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~6个字节表示一个符号,根据不同的符号而变化字节长度

占2个字节的:〇(〇有两个读音 xīng líng,(一) xīng 同“星”;(二) líng 同“零”。)

占3个字节的:基本等同于GBK,含21000多个汉字

占4个字节的:中日韩超大字符集里面的汉字,有5万多个

一个utf8数字占1个字节

一个utf8英文字母占1个字节

布尔类型

boolean:表示逻辑值,只能取 true 或 false。

java.lang.Integer

MIN_VALUE = 0x80000000 -2^31

MAX_VALUE = 0x7fffffff 2^31-1

Integer.toBinaryString(int)方法将一个整数转换成二进制表示的字符串

Integer.parseInt(binaryString, 2) 把一个二进制字符串转换成为整数

Integer.reverse(123) ---按位反转整数

Integer.bitCount(122) --统计int中1的个数

Integer.highestOneBit(123) ---最高位的1的值

Integer.lowestOneBit(3) ---最低位的1的值

Integer.numberOfLeadingZeros(3) ---前面0的个数

Integer.numberOfTrailingZeros(3) ---后面0的个数

java.util.HashMap

map.getOrDefault(a,b);

map.remove(key);

map.containsKey(key)

map.values()

java.util.HashSet

把List转成Set

List list = Arrays.asList("apple", "orange", "banana");

Set set = new HashSet<>(list);

List list = Arrays.asList("apple", "orange", "banana");

Set set = new HashSet<>();

set.addAll(list);

java.util.List

list.add("apple"); // 在末尾添加元素

list.add(0, "banana");

list.remove("apple"); // 删除元素"apple"

list.remove(1);

list.clear();

//list转数组:

list.toArray(new int[0])

list.toArray(new int[0][2])

//list to数组字符串:

list.toString() [1, 2]

Array

[]:

int[] array = {1, 2, 3, 4, 5};

int length = array.length;

java.util.Arrays

List wordList = Arrays.asList(s.split("\\s+")); ----数组变成list

升序Arrays.sort

降序:Arrays.sort(arr, (o1, o2) -> o2 - o1); ---注意如果要对sort进行反向排序,要确保arr不是基础类型的数组,必须是对象类型的数组。

如果对int进行排序,两个int的减法运算可能溢出,需要将其转换成long来计算,compare的返回值是1或者-1.

Arrays.sort(points, (a, b)-> (long)a[1]-(long)b[1]>0?1:-1) ------int[][]是可以的,但是int[]不行。

Arrays.equals(str1,str2) ---两个数组相等

System.arraycopy(src, srcPos, dest, destPos, length) ---拷贝数组

byte[] partArray = Arrays.copyOfRange(fullArray, start, end) ---end不包含,长度可以大于原始数组的长度

byte[] mergedArray = Arrays.copyOf(byteArray1, byteArray1.length + byteArray2.length) ---拷贝数组,长度可以大于原始数组的长度

Arrays.fill(dp, max) ---填充数组

Integer[] a = new Integer[]{1,2,35,34,21};

Arrays.toString(a) ----数组转成字符串。[35, 34, 21, 2, 1]

byte转字符:直接用(char)a

byte数组转字符串:byte[] byteArray = {65, 66, 67}; String result = new String(byteArray);

打印数组

Arrays.stream(arr).forEach(System.out::println);

String

char[] str1 = s.toCharArray() ---字符串转成char数组

s.charAt(1)

str.substring(0, 3) ----不包含end

str.length()

int转String:String s = String.valueOf(x);

String.join(" ",d) ----合并集合,变成字符串。只要是Iterable的都可以join。比如List,Set,但是不能是数组

mainString.contains(subString)

"abc".indexOf("a")

"abc".lastIndexOf("a")

StringBuffer

ans.reverse() ---反转字符

ans.toCharArray() ---转换成char数组

修改其中的某个字符

StringBuffer sb = new StringBuffer(curr); sb.setCharAt(j, keys[k]); String next = sb.toString();

java.util.Random

java.util.Collections

反转数组:

  1. 排序 (sort):

  2. 反转 (reverse):

  3. 打乱 (shuffle):

  4. 查找最大值和最小值 (maxmin):

  5. 替换所有元素 (replaceAll):

  6. 查找元素位置 (binarySearch):在列表中进行二分查找,该列表必须是按升序排序的,如果未找到,则返回一个负值

Character

java.util.Stack,PriorityQueue

Deque

ConcurrentLinkedDeque(线程安全)

LinkedList, ArrayDeque, Queue

链表

反转链表:

最后更新于

这有帮助吗?