算法笔记

查到吐的一些代码

1.Autoboxing: int[] --> Integer[]

1.Loop, nasty but fast, doable because of Integer.valueOf()

int[] arr = {1, 2, 3};
Integer[] res = new Integer[arr.length];
int j = 0;
for (int i : arr) {
    res[j++] = i; 
}

2.Java8, the stream is as slow as fuck, and looks like a line of shit

int[] arr = {1,2,3};
Integer[] res = Arrays.stream( arr ).boxed().toArray( Integer[]::new );

3.ArrayUtil(?)

Integer[] res = ArrayUtils.toObject(arr); // did not try

2.Unboxing: Integer[] --> int[]

Doable because of Integer.intValue()

Integer[] arr = {1, 2, 3};
int[] res = new int[arr.length];
int j = 0;
for (int i : arr) {
    res[j++] = i;
}

3.int[] --> ArrayList()

int[] original = {1,2,3};
List<Integer> res = new ArrayList<>();
for (int i : original) {
    res.add(i);
}
return res;

4.ArrayList() --> int[]

1.loop

List<Integer> arr = new ArrayList<>(Arrays.asList(1, 2, 3));
int[] res = new int[arr.size()];
int j = 0;
for (int i : arr) {
    res[j++] = i;
}
return res;

2.java8

List<Integer> arr = new ArrayList<>(Arrays.asList(1, 2, 3));

// 1.
int[] res1 = arr.stream().mapToInt(i -> i).toArray(); 

// 2.
int[] res2 = arr.stream().mapToInt(Integer::intValue).toArray();

5.Integer[] --> ArrayList

Notice that Arrays.asList only works for wrapper classes

Integer[] original = {1, 3, 4};
List<Integer> arr = new ArrayList<>(Arrays.asList(original));
return arr;

6.ArrayList --> Integer[]

List<Integer> arr = new ArrayList<>(Arrays.asList(1, 2, 3));
Integer[] res = arr.toArray(new Integer[arr.size()]);

Containers之间的转换

集合之间的转换大概代码如下:不过这边的addAll只对object有效,对primitives无效,所以有时候还是需要手动loop

Set<Integer> set = new HashSet<>(Arrays.asList(original));
List<Integer> res = new LinkedList<>(set); // HashSet -> LinkedList
res.addAll(res);

Map的写法

  • 统计数组中各数字出现的次数
Integer[] original = {1, 3, 4, 1}; 
HashMap<Integer, Integer> map = new HashMap<>(); // number, count
for (int i : original) {
    map.put(i, map.getOrDefault(i, 0) + 1); // replace null returned by map.get("non-exist element") 
}

对比下python

>>> d = {}
>>> l = [1, 2, 3, 1]
>>> for i in l:
...     d[i] = d.get(i, 0) + 1
...
>>> d
{1: 2, 2: 1, 3: 1}

混合用法,参见350, 350. Intersection of Two Arrays II

  • 统计keySet(), values()中的最大值

可以使用Collections.max,底层是interator

int maxKey = Collections.max(map.keySet());
int maxValue = Collections.max(map.values());

Entry, Iterator的用法

Map<Integer, Integer> map = new HashMap<>();
map.put(1, 2);
// for each: entrySet(key-value pair)
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
    int key = entry.getKey();
    int value = entry.getValue();
}

// iterator: key
Iterator<Integer> it = map.keySet().iterator();
int key = it.next();

// for each: values
for (int value : map.values()) {
    System.out.println(value);
}
  • Sort map by values or keys

参见 347. Top K Frequent Elements

其他杂七杂八的api用法:https://www.nyannko.cf/posts/containers.html

results matching ""

    No results matching ""