
java 基础
ArrayList 和 LinkedList的区别
ArrayList 是基于动态数组的数据结构,而 LinkedList 是基于链表的数据结构。
HashMap的底层结构
HashMap “数组+链表”组成,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。
首先根据key的值hash计算得到索引位置。如果索引值为null,则将val插入进去。如果出现hash冲突,则按照顺序插入到链表中
java集合
HashMap 为什么线程不安全?
多线程下会出现数据覆盖问题,put方法的步骤是先根据key计算出hash值,得到索引,找到该元素在数组中存储的下标,如果对应的下标没有值,则直接put,如果有则覆盖。 比如两个线程A,B,元素hash冲突,插入同一个下标,就会导致值覆盖问题。