hashcode

What is alternative hashing for String keys in Java 8?

我的梦境 提交于 2020-01-10 13:40:56
问题 Java 8 is providing alternative hashing for String keys to improve performance when a large number of key hash code collisions are encountered. Can anybody explain what is that and how it will work? 回答1: From this email of core-lib-devs@openjkd : A new interface Hashable32 is introduced. Hashable32 provides a method hash32() String implements Hashable32 and hash32() method HashMap et al recognize String and invoke hash32() rather than hashCode() The revisions of the code: Murmur3 : https:/

java集合

空扰寡人 提交于 2020-01-10 10:22:43
转自:http://www.cnblogs.com/ysocean/p/6555373.html 一、集合的由来   通常,我们的程序需要根据程序运行时才知道创建多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是数组只能放统一类型的数据,而且其长度是固定的,那怎么办呢?集合便应运而生了! 为了对集合有个更加深入的了解,可以看我的这一篇文章: 用 Java 数组来实现 ArrayList 集合 http://www.cnblogs.com/ysocean/p/6812674.html 二、集合是什么?   Java集合类存放于 java.util 包中,是一个用来存放对象的容器。 注意:①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。    ②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。    ③、集合可以存放不同类型,不限数量的数据类型。 三、Java 集合框架图 此图来源于: http://blog.csdn.net/u010887744/article/details

Meaning of Double.doubleToLongBits(x)

孤者浪人 提交于 2020-01-10 03:38:19
问题 I am writing a class Vec2D , representing a 2 dimensional vector. I store x and y in double s. When asked to generate equals(Object obj and hashCode() , eclipse generated this: @Override public int hashCode() { final int prime = 31; int result = 1; long temp; temp = Double.doubleToLongBits(x); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(y); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } @Override public boolean equals(Object

HashSet与HashMap的区别

放肆的年华 提交于 2020-01-10 00:10:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> HashSet:   HashSet实现了Set接口,它不允许集合中出现重复元素。当我们提到HashSet时,第一件事就是在将对象存储在 HashSet之前,要确保重写hashCode()方法和equals()方法,这样才能比较对象的值是否相等,确保集合中没有 储存相同的对象。如果不重写上述两个方法,那么将使用下面方法默认实现:  public boolean add(Object obj)方法用在Set添加元素时,如果元素值重复时返回 "false",如果添加成功则返回"true" HashMap:   HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许出现重复的键(Key)。Map接口有两个基本的实现 TreeMap和HashMap。TreeMap保存了对象的排列次序,而HashMap不能。HashMap可以有空的键值对(Key(null)-Value(null)) HashMap是非线程安全的(非Synchronize),要想实现线程安全,那么需要调用collections类的静态方法synchronizeMap()实现。 public Object put(Object Key,Object value)方法用来将元素添加到map中。 HashSet与HashMap的区别:

HashMap和HashSet的区别

[亡魂溺海] 提交于 2020-01-10 00:07:48
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> HashMap和HashSet的区别是Java面试中最常被问到的问题。如果没有涉及到Collection框架以及多线程的面试,可以说是不完整。而Collection框架的问题不涉及到HashSet和HashMap,也可以说是不完整。HashMap和HashSet都是collection框架的一部分,它们让我们能够使用对象的集合。collection框架有自己的接口和实现,主要分为Set接口,List接口和Queue接口。它们有各自的特点,Set的集合里不允许对象有重复的值,List允许有重复,它对集合中的对象进行索引,Queue的工作原理是FCFS算法(First Come, First Serve)。 首先让我们来看看什么是HashMap和HashSet,然后再来比较它们之间的分别。 什么是HashSet HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。 public boolean add(Object o)方法用来在Set中添加元素

set,list,map集合相关

▼魔方 西西 提交于 2020-01-10 00:05:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、集合类简介 数组是很常用的一种的数据结构,我们用它可以满足很多的功能,但是,有时我们会遇到如下这样的问题: 1、我们需要该容器的长度是不确定的。 2、我们需要它能自动排序。 3、我们需要存储以键值对方式存在的数据。 如果遇到上述的情况,数组是很难满足需求的,接下来本章将介绍另一种与数组类似的数据结构——集合类,集合类在Java中有很重要的意义,保存临时数据,管理对象,泛型,Web框架等,很多都大量用到了集合类。 常见的集合类有这些种: 实现Collection接口的:Set、List以及他们的实现类。 实现Map接口的:HashMap及其实现类,我们常用的有Map及其实现类HashMap,HashTable,List、Set及其实现类ArrayList、HashSet,因为集合类是很大的一块内容,我们不方便把它的全部内容写出来,只能慢慢的增加,希望各位读者有自己想法的,踊跃向我提出,我们共同打造精美的博客,供广大编程爱好者学习,下面我我们通过一个图来整体描述一下: 这个图片没法显示的很清楚,所以我将原始图片上传到了我的资源里:http://download.csdn.net/detail/zhangerqing/4711389。愿意看清楚的就去下吧。 下面的表格也许可以更直接的表现出他们之间的区别和联系:

Hashcode of an int

假装没事ソ 提交于 2020-01-09 09:34:23
问题 What is the hashcode of a primitive type, such as int? for example, let's say num was an interger. int hasCode = 0; if (num != 0) { hasCode = hasCode + num.hashCode(); } 回答1: For the hashCode of an int the most natural choice is to use the int itself. A better question is what to use for the hashCode of a long since it doesn't fit into the int -sized hashcode. Your best source for that—and all hashCode -related questions—would be Effective Java. 回答2: Taken from the Integer.class source code:

Hashcode of an int

我的未来我决定 提交于 2020-01-09 09:33:13
问题 What is the hashcode of a primitive type, such as int? for example, let's say num was an interger. int hasCode = 0; if (num != 0) { hasCode = hasCode + num.hashCode(); } 回答1: For the hashCode of an int the most natural choice is to use the int itself. A better question is what to use for the hashCode of a long since it doesn't fit into the int -sized hashcode. Your best source for that—and all hashCode -related questions—would be Effective Java. 回答2: Taken from the Integer.class source code:

Java基础加强之集合

本秂侑毒 提交于 2020-01-09 04:04:45
集合整体框架图 各集合框架的概述 1. Collection(常用List和Set,不常用Queue和Vector),单元素集合。 2. Map(常用HashMap和TreeMap,不常用HashTable),key-value映射关系。 3. Iterator(迭代器) 4. Comparable和Comparator比较器 5. Collections和Arrays工具类 Java中结合和数组的比较 1.  数组的长度在初始化时指定,只能保存定长的数据。   而集合可以保存不确定长度的数据。同时可以保存具有映射关系的数据(即关联数组,键值对key-value)。 2.  数据元素既可以是基本类型的值,也可以是对象,集合只能保存对象 (实际上是只保存对象的引用变量),基本数据类型的变量要转换成对应的包装类才能放入集合中。 常用集合特性概述 List系 List的特点: 元素有放入顺序,元素可以重复 。 List接口的三个实现类:ArrayList、LinkedList和Vector。 ArrayList、LinkedList和Vector的区别 LinkedList:底层是基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时也存储下一个元素的内存地址。 链表增删快,查找慢。 ArrayList和Vector: 两者底层都是基于数组实现的,查询快,增删慢。

java集合问题篇

此生再无相见时 提交于 2020-01-09 04:02:14
java集合问题篇 ● 请解释为什么集合类没有实现Cloneable和Serializable接口? Java集合必会14问(精选面试题整理) HashMap的put方法的具体流程? hashmap如何扩容 hashmap是如何解决hash冲突的 ● 请解释为什么集合类没有实现Cloneable和Serializable接口? Java集合必会14问(精选面试题整理) Java集合必会14问(精选面试题整理) HashMap的put方法的具体流程? 首先判断数组是否为空(为空就初始化数组),不空----》key是否为空(空:将null插入到数组的0号位置),不空—》根据key算出hash值,再根据hash值算出将要插入的数组的下标【(数组长度-1)&hashcode】,如果该位置有元素了,则将该元素和要插入的元素进行比较(先比较hash,再比较key,相同,则覆盖其value,不同,则jdk1.7使用头插法将添加的元素加入到链表头,然后将链表下移。jdk1.8是使用尾插法。【1.8由于使用了红黑树,总是要遍历链表的,所以直接将其放入尾部】)插入元素后,计数变量:size++ hashmap如何扩容 初始化hashmap的时候会有默认的数组长度16,加载因子3/4,此时阈值为16 3/4=12; 当元素超过12个时就会进行扩容。新数组长度是16 2=32,阈值是32*3/4=24