zoukankan      html  css  js  c++  java
  • Java基础-容器

    一、整体架构

    几个基础问题:

    1.List如何排序?

    2.List删除某个元素

    3.对比问题(关键是掌握每个的特性):

      List和Set的区别

      ArrayList和HashSet的区别

      HashMap和Hashtable区别

    二、ArrayList

    1.概述

    2.源码

    3.扩容机制

    4.快速失败机制

    5.CopyOnWrite原理及缺点

    三、HashSet

    四、HashMap

    1.hashmap的数据结构 

      - 数组+链表+红黑树(jdk8)

    //数组
    Node[] table
    
    //数组元素的结构
    static class Node<K,V> implements Map.Entry<K,V> {
            final int hash;    //用来定位数组索引位置
            final K key;
            V value;
            Node<K,V> next;   //链表的下一个node
    }

      - 数组table长度length大小强制是2的n次方(“强制”的意思是不管你传入的是否是2的n次方,都会处理成2的n次方),那为什么是2的n次方呢?

          原因是:定位元素在table位置,当length为2的n次方时,有一个规律 “h& (length-1)=h%length”,然而运算效率上&比%元素高,所以底层强制2的n次方。

          简单一句话就是:HashMap中的hash算法,当length为2的n次方时,&比%效率更高

    2.hash冲突解决

      - HashMap解决冲突用的是链地址法,也就是用数组+链表这种结构来解决hash冲突的

    3.机制扩容

      - 扩容的时机(可以参考这篇文章 https://blog.csdn.net/u014532901/article/details/78936283)

         当map中包含的Node的数量大于等于threshold = loadFactor * capacity的时候,且新建的Node刚好落在一个非空的桶上,此刻触发扩容机制,将其容量扩大为2倍

      - 扩容的rehash造成并发死锁问题

        

    3.红黑树

    4.最小树化容量

    5.hash冲突解决

    五、Hashtable

    六、ConcurrentHashMap

    1.jdk7

    2.jdk8

    七、其他面试题

  • 相关阅读:
    UpdatePanel 脚本失效的解决
    DataTable 中的查询、排序及分页(c#)
    如何让Gridview在没有数据的时候显示表头
    Jquery 对.net服务器控件RadioButtonList进行赋值和取值的操作
    给Repeater控件里添加序号的5种方法
    C#缓存absoluteExpiration、slidingExpiration两个参数的疑惑
    筛选DataTable数据的方法
    CSS前端基础应用实践
    js实现页面自动刷新
    什么是MVC
  • 原文地址:https://www.cnblogs.com/yejiang/p/13507548.html
Copyright © 2011-2022 走看看