01 ArrayList

jdk 基于 8 版本

在平时的开发中,我们会经常用到 ArrayList, 非常有必要了解源码

使用方式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public class ArrayListTest {

    @Test
    void test() {
        List<String> ids = new ArrayList<>();
        assertThat(ids.add("1")).isEqualTo(true);
        assertThat(ids.add("2")).isEqualTo(true);
        assertThat(ids.add("3")).isEqualTo(true);
        assertThat(ids.remove("2")).isEqualTo(true);
        assertThat(ids.set(0, "4")).isEqualTo("1");
        assertThat(ids.get(0)).isEqualTo("4");
    }
}

add

添加元素到 ArrayList 中,如果空间不够,则触发 newCapacity = oldCapacity + (oldCapacity >> 1)

02 LinkedList

jdk 基于 8 版本

在平时的开发中,我们会经常用到 LinkedList, 非常有必要了解源码

使用方式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public class LinkedListTest {

    @Test
    void test() {
        List<String> ids = new LinkedList<>();
        assertThat(ids.add("1")).isEqualTo(true);
        assertThat(ids.add("2")).isEqualTo(true);
        assertThat(ids.add("3")).isEqualTo(true);
        assertThat(ids.remove("2")).isEqualTo(true);
        assertThat(ids.set(0, "4")).isEqualTo("1");
        assertThat(ids.get(0)).isEqualTo("4");
    }
}

add

添加元素

缓存一致性问题

当我们使用缓存时,必定会遇到缓存一致性问题,也就是在读写请求过程中数据库缓存中的数据不一致。 下面将分析为什么会造成不一致, 所有的代码参考末尾