0%

synchronizedMap和Hashtable

hashmap是一种存取高效,但是不保证有序的容器。数据结构是数组+链表+红黑树,是解决hash冲突的产物,它实现了Map接口,采用kv键值对存储数据,并且实现了浅拷贝和序列化。

一、概念

  1. HashMap是一种存取高效,但是不保证有序的容器,数据结构是数组+链表+红黑树,是解决hash冲突的产物,它实现了Map接口,采用kv键值对存储数据,并且实现了浅拷贝和序列化,默认大小是16,阈值是0.75,初始化大小必须是2的幂,最大是2的30次方,数组中存储的链表节点Entry类实现于Map.Entry接口,实现了对节点的通用操作。

  2. java.util.concurrent包下的容器都是安全失败的,可以在多线程下并发使用,并发修改。

二、扩展

  1. 快速失败fail-fast是java集合中的一种机制,在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。

    • 原理:在遍历的过程中使用一个modCount遍历用来记录内容变化,如果发生变化,他的值就会改变,每当迭代器使用hashNext、next遍历下一个元素之前,都会检测modCount变量。
  2. 浅拷贝与深拷贝

    • 浅拷贝只复制指向某个对象的指针,而不是复制对象本身,新旧对象还是共享同一块内存,拷贝对象的时候只对基本数据类型进行了拷贝,对于引用数据类型只是进行了引用的传递,没有真实的创建一个新的对象。
    • 深拷贝会创造一个一模一样的对象,新旧对象不共享内存

三、参考