美文网首页
Java集合总结:

Java集合总结:

作者: cp_insist | 来源:发表于2016-09-14 12:14 被阅读0次

概述:尽管已经将java核心编程中的集合看了好几遍了,但是还是感觉心里没有低;所以今天特别将集合这块常见的面试题进行总结,一边加深自己对java集合的理解;
<1>:谈谈你对HashMap具体实现的理解:
首先,hashMap是一个键值对类型的集合,他的键和值都可以为null;
使用hashMap存储数据时,首先我们键会先调用它的hashCode方法生成一个hashCode值,然后对这个的hashCode值再进一次移位的运算;

//java中的抖动函数
static  final int hash(Object Key){
    int h;
    if(key== null){
      return null  
    }else{
     return key==null ? 0:((h=h.hashCode) ^ h>>>16)
  }
} 

当然这样得到的hash值是不能直接作为数组的索引存储的;太大的;改进后的hashMap初始容量才是16;所以我们还需要对这个得到的值进行一次模运算:

 static int indexFor(int hash, int length) {
        return hash & (length-1);
   }

得到的结果便是我们想要存储的bucket的位置;此时如果篮子中没有值,我们直接将值放进这个bucket中键即可;如果有值即产生了我们所谓的hash冲突了;
散列表要解决的一个问题就是散列值的冲突问题,通常是两种方法:链表法和开放地址法。
链表法就是将相同hash值的对象组织成一个链表放在hash值对应的槽位;
开放地址法是通过一个探测算法,当某个槽位已经被占据的情况下继续查找下一个可以使用的槽位。java.util.HashMap采用的链表法的方式,链表是单向链表。形成单链表的核心代码如下:

void addEntry(int hash, K key, V value, int bucketIndex) {
        if ((size >= threshold) && (null != table[bucketIndex])) {
            resize(2 * table.length);
            hash = (null != key) ? hash(key) : 0;
            bucketIndex = indexFor(hash, table.length);
        }
        createEntry(hash, key, value, bucketIndex);
    }
 void createEntry(int hash, K key, V value, int bucketIndex) {
        Entry<K,V> e = table[bucketIndex];
        table[bucketIndex] = new Entry<>(hash, key, value, e);
        size++;
    }

相关文章

  • Java集合框架总结篇

    Java集合框架总结篇

  • java集合框架学习总结

    title: java集合框架学习总结 tags:集合框架 categories:总结 date: 2017-03...

  • Java集合总结

    Java集合总结 概述 Java集合类主要由两个接口派生而出: Collection Map 这两个是Java集合...

  • java中遍历list、set、map集合的常用方法

    前言:java的集合框架细节阐述我们这里就不赘述了,可参考Java - 集合框架完全解析,这里只总结java集合的...

  • 常用数据结构

    Java 集合系列目录(Category) 下面是最近总结的Java集合(JDK1.6.0_45)相关文章的目录。...

  • Java基础面试总结

    【面试汇总】Java面试题-1Java面试题-2 【集合】Java集合及concurrent并发包总结(转)Jav...

  • Java集合框架使用总结

    Java集合框架使用总结 前言: 本文是对Java集合框架做了一个概括性的解说,目的是对Java集合框架体系有个总...

  • 面试总结-Java高级篇

    Java面试总结 1.你用过哪些集合类? 大公司最喜欢问的Java集合类面试题 40个Java集合面试问题和答案 ...

  • Java集合总结

    Java集合类主要有2大分支,Collection及Map。Collection体系如下: Map体系如下: **...

  • java集合总结

    本文原链接点我查看 前言 在PHP中,集合是很简单的,就一个Array,既可以做数组,又可以做map,对比JAVA...

网友评论

      本文标题:Java集合总结:

      本文链接:https://www.haomeiwen.com/subject/hrrvettx.html