
synchronized
关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
Linkedlist 和 ArrayList
LinkedList是双向链表,没有初始化大小
ArrayList初始化大小为10
一般在尾部新增元素的话,LinkedList的速度是比ArrayList慢的,LinkedList需要创建节点并进行指向,ArrayList则只要尾部加1,导致LinkedList速度比Arraylist慢
随机增删元素时,ArrayList需要增删元素需要移动位置,LinkedList只是新增删除节点,导致ArrayList速度比LinkedList慢;但是查找时ArrayList有下标直接定位,LinkedList通过遍历定位,LinkedList的速度就比ArrayList慢。
另外,LinkedList不具有 线程安全 的特质【远古记录:多线程并发操作时遇到过头部丢失的情况】
ArrayList也不具有 线程安全 的特质,可看源码的add方法实现
NULL
java 关于null:
1.不能将null赋值给基本类型(int,boolean等)
2.对null进行instanceof操作会报错
StringBuffer 与 StringBuilder
StringBuffer:
1.保证线程安全
2.效率相比较低
StringBuilder:
1.线程不安全
2.效率相比更高
HashMap
put时,根据key的hash值确定位置存放;当该位置有值时,会以链表的形式存放,新值存表头。
get时,先根据key的hash值定位,若有多值,则遍历使用equals确定查找目标。
Stream
stream流操作:
filter:过滤
map:在流中对所有值做映射
collector:获取集合,根据Collectors参数确定输出的集合类型
findany:任意匹配,需要与orElse配合使用才能得到想要的结果
lambda
2017-3-28:
看了下java8下的lambda表达式的示例
实现Runnable线程案例
使用() -> {} 替代匿名类:
//Before Java 8:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Before Java8 ");
}
}).start();
//Java 8 way:
new Thread( () -> System.out.println("In Java8!") ).start();
可以使用 下面语法实现Lambda:
(params) -> expression
(params) -> statement
(params) -> { statements }
如果你的方法并不改变任何方法参数,比如只是输出,那么可以简写如下:
() -> System.out.println("Hello Lambda Expressions");
如果你的方法接受两个方法参数,如下:
(int even, int odd) -> even + odd




近期评论