网域高科学校网站管理系统,平面广告设计好学吗,软件技术是做什么的,学习完成网站建设作业一、 HashMap
1#xff09;底层实现 数组链表红黑树#xff08;在JDK1.8中如果链表长度大于8的时候才转换为红黑树)
2#xff09;是否线程安全不支持线程的同步#xff0c;线程不安全#xff0c;如需同步#xff0c;可用Collections的synchronizedMap方法或者使用Concu…一、 HashMap
1底层实现 数组链表红黑树在JDK1.8中如果链表长度大于8的时候才转换为红黑树)
2是否线程安全不支持线程的同步线程不安全如需同步可用Collections的synchronizedMap方法或者使用ConcurrentHashMap调用这个对象的方法使HashMap具有同步的能力。
3插入值操作过程
public synchronized V put(K key, V value) {// Make sure the value is not nullif (value null) {throw new NullPointerException();}// Makes sure the key is not already in the hashtable.Entry?,? tab[] table;int hash key.hashCode();int index (hash 0x7FFFFFFF) % tab.length;SuppressWarnings(unchecked)EntryK,V entry (EntryK,V)tab[index];for(; entry ! null ; entry entry.next) {if ((entry.hash hash) entry.key.equals(key)) {V old entry.value;entry.value value;return old;}}addEntry(hash, key, value, index);return null;}4) 特点 HashMap最多只允许一条记录的键为null允许多条记录的值为null然后和插入效率高但是插入的数据是无序的插入、删除和定位元素HashMap是最好的选择
5hashmap什么时候进行扩容 当hashmap中的元素个数超过数组大小loadFactor时就会进行数组扩容loadFactor的默认值为0.75也就是说默认情况下数组大小为16那么当hashmap中元素个数超过160.7512的时候就把数组的大小扩展为2*1632即扩大一倍然后重新计算每个元素在数组中的位置而这是一个非常消耗性能的操作。 二、 Hashtable
1底层实现 它继承自Dictionary类
2是否线程安全支持线程的同步线程安全即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢 三、LinkedHashMap
1底层实现双向链表HashMap(LinkedHashMap是继承于HashMap)
2) 是否支持线程安全 不支持线程的同步线程不安全
3特点保存了记录的插入顺序也就是数据是有序的在用Iterator遍历LinkedHashMap时先得到的记录肯定是先插入的, 也可以在构造时用带参数按照应用次数排序一般在遍历的时候会比HashMap慢有HashMap的全部特性不过有种情况例外当HashMap容量很大实际数据较少时遍历起来可能会比LinkedHashMap慢因为LinkedHashMap的遍历速度只和实际数据有关和容量无关而HashMap的遍历速度和他的容量有关。 四、TreeMap
1底层实现红黑树
2是否线程安全不支持线程的同步线程不安全
3特点TreeMap实现SortMap接口能够把它保存的记录根据键排序,默认是按键值的升序排序也可以指定排序的比较器当用Iterator 遍历TreeMap时得到的记录是排过序的。 五、ConcurrentHashMap
1底层实现拓展了Hashtable底层采用分段的数组链表实现
2是否线程安全支持线程的同步线程安全即任一时刻只有一个线程能写ConcurrentHashMap。
3特点锁分离技术段内扩容,ConcurrentHashMap对分开两次操作也是安全的。