-
Notifications
You must be signed in to change notification settings - Fork 0
/
java8
40 lines (31 loc) · 1.72 KB
/
java8
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
stream(多核):lamda,串/并行,fork/join(迭代器的并行化),链表管道化
lists.parallelStream.
filter(t -> t.get == '').
sorted().
map().
collect(Collectors.toList());
foreach是terminal,peek操作多次
https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/
default method :允许在接口中实现方法,类实现多个接口时,可直接调用方法(多继承)
避免了接口与实现类高耦合度
-->参考新版foreach:
package java.lang;
import java.util.Objects;
import java.util.function.Consumer;
public interface Iterable<T> {
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
}
System.exit(1):Runtime.getRuntime.shutdown()关闭了jvm,下面代码1不会执行
copyonwrite:弱一致性(add和get时,若有修改,不能保证修改的数据实时被看到)
-->Arrays.copyOf():先拷贝,实现并发非阻塞 CopyOnWriteArrayList:
-->内部类用final修饰局部变量,不共享,也是copy一份
-->CAS保证原子性:for (;;) {atomicI.compareAndSet(i, ++i);}多次循环直到成功break
HashMap:高位取模 int index = (tab.length - 1) & hash;
-->数组的长度按规定一定是2的幂(2的n次方)。
-->因此,数组的长度的二进制形式是:10000…000, 1后面有一堆0。tab.length - 1 的二进制形式就是01111…111, 0后面有一堆1。
最高位是0, 和hash值相“与”,结果值一定不会比数组的长度值大,因此也就不会发生数组越界.