java基础知识

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