hashcode

Java之集合类

倾然丶 夕夏残阳落幕 提交于 2020-01-24 04:57:33
一、集合类简介 数组是很常用的一种的数据结构,我们用它可以满足很多的功能,但是,有时我们会遇到如下这样的问题: 1、我们需要该容器的长度是不确定的。 2、我们需要它能自动排序。 3、我们需要存储以键值对方式存在的数据。 如果遇到上述的情况,数组是很难满足需求的,接下来本章将介绍另一种与数组类似的数据结构——集合类,集合类在Java中有很重要的意义,保存临时数据,管理对象,泛型,Web框架等,很多都大量用到了集合类。 常见的集合类有这些种: 实现Collection接口的:Set、List以及他们的实现类。 实现Map接口的:HashMap及其实现类,我们常用的有Map及其实现类HashMap,HashTable,List、Set及其实现类ArrayList、HashSet,因为集合类是很大的一块内容,我们不方便把它的全部内容写出来,只能慢慢的增加,希望各位读者有自己想法的,踊跃向我提出,我们共同打造精美的博客,供广大编程爱好者学习,下面我我们通过一个图来整体描述一下: 实现Collection接口的类,如Set和List,他们都是单值元素(其实Set内部也是采用的是Map来实现的,只是键值一样,从表面理解,就是单值),不像实现Map接口的类一样,里面存放的是key-value(键值对)形式的数据。这方面就造成他们很多的不同点,如遍历方式,前者只能采用迭代或者循环来取出值

反射

…衆ロ難τιáo~ 提交于 2020-01-24 01:24:02
反射 1.获得反射对象的几种方式 //测试Class类的创建方式有哪些 public class test02 { public static void main(String[] args) throws ClassNotFoundException { Person person = new Student(); System.out.println("这个人是" + person.name); //方式一:通过对象获得 Class c1 = person.getClass(); System.out.println(c1.hashCode()); //方式二:forname获得 Class c2 = Class.forName("com.kk.reflection.Student"); System.out.println(c2.hashCode()); //方式三:通过类名.class Class<Student> c3 = Student.class; System.out.println(c3.hashCode()); //方式四:基本内置类型的包装类都有一个TYPE属性 Class c4 = Integer.TYPE; System.out.println(c4); //获得父类类型 Class c5 = c1.getSuperclass(); System.out

java基础 equals和hashCode、HashMap

六眼飞鱼酱① 提交于 2020-01-22 20:05:06
我们知道equals和hashCode都是Object的方法,equals是比较对象是否相同的,默认的是比较地址值,hashCode是获取哈希码的,获取哈希码是有一套哈希算法的,具体没研究,每个版本的java都有些不一样。 equals和hashCode的关系更多的是一种约定,equals相同时,hashCode一定是相同的,equals不同时,hashCode也可能是相同的。所以才会有,重写equals方法一定要重写hashCode方法 hashCode是在HashMap中使用的,在hashMap是采用数组加链表的方式实现的,hashCode通过再hash然后能快速定位到数组的位置,然后再通过equals在链表中查找。说白了hashCode的存在就是为了提高查找效率。 Java中HashMap的实现原理 Java基础面试题 Object类中Hashcode 和 equals区别与联系是什么? HashMap的源码需要好好研究一下,它用到了红黑树 Java源码解析——集合框架(五)——HashMap源码分析 来源: CSDN 作者: Zhongyi_Li 链接: https://blog.csdn.net/lizhongyisailang/article/details/104069076

Java学习-hashcode综合练习

∥☆過路亽.° 提交于 2020-01-22 18:58:41
/*--> */ /*--> */ 1.自定义字符串的hashcode 2.自定义MyHashMap 3.内容查找性能比较 其中:IHashMap接口、Entry类如下 1 package Collection; 2 3 public interface IHashMap { 4 public void put(String key,Object value); 5 public Object get(String key); 6 7 } 1 package Collection; 2 3 public class Entry { 4 public Object key; 5 public Object value; 6 public Entry(Object key,Object value){ //构造方法 7 this.key=key; 8 this.value=value; 9 } 10 public String toString(){ 11 return "[key=" + key + ", value=" + value + "]"; 12 } 13 14 } 给出代码: 1 package Collection; 2 3 import java.util.ArrayList; 4 import java.util.HashSet; 5 import java

How to generate a hash code from three longs

社会主义新天地 提交于 2020-01-22 14:45:48
问题 I have a HashMap with coordinates as keys. Coordinates have 3 longs holding the x, y and z coordinate. (Coordinate is and needs to be a custom class, the coordinates need to be longs). Now i want to be able to access e.g. the field [5, 10, 4] by doing: hashMap.get(new Coordinate(5, 10, 4)) . I have implemented the equals method but that is not enough since apparently i need to provide an implementation for hashCode as well. So my question is how do i generate an unique hashCode from three

《算法导论》第11章 散列表 (3)开放寻址

╄→尐↘猪︶ㄣ 提交于 2020-01-22 01:50:52
前一节介绍是最简单的冲突解决方法-链接法。开放寻址与链接法不同,所有元素都放在散列表内。 在这种方法中,散列表可能会被填满。开放寻址不需要指针,只需要计算出要存取的各个槽。 由于不用存储指针而节省的空间可以提供更多的槽。 有三种技术常用来计算开放寻址法中的探查序列:线性探查、二次探查和双重探查。 下面的实现中,三种方法的差别只在计算探查序列的那一行代码。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 20 typedef struct _Entry { char *key; char *val; } Entry; // 指针数组 Entry *hashmap[SIZE]; // Same as hashcode when String put to HashMap unsigned hashcode(char *key) { // Ensure >> is logical shift unsigned h = 0; // String.hashcode() do h = 31 * h + *key++; while (*key != '\0'); // HashMap.hash() h ^= (h >> 20) ^ (h >> 12); return h ^ (h >> 7) ^ (h

总结1.13

青春壹個敷衍的年華 提交于 2020-01-21 05:13:48
两个对象值相同(x.equals(y) == true),hash code是否可以不相等? 不能,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的: (1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同; (2)如果两个对象的hashCode相同,它们并不一定相同。 ArrayList和Vector(Vector)是线程安全,插入时(ArrayList)性能好? char型变量中能否存储一个中文汉字?原因是? 能够存储一个中文汉字,因为java中以unicode编码,一个char占16个字节 ###当一个线程进入一个对象的一个synchronized方法后,其他线程是否可以进入此对象的其他方法? 可以进入其他非synchronized的方法,synchronized的方法不可以的! try{}里有一个return语句,那么紧跟在这个try后面的finally{}里的代码会不会被执行?什么时候执行,在return之前还是后? finally中的代码比return和break语句后执行 jsp中request、session、application、page作用域从小到大顺序依次为: page<request<session

Java中Object类的各种方法详解

蹲街弑〆低调 提交于 2020-01-21 04:02:01
文章目录 1.registerNatives() 2.getClass() 3.hashCode() 4.equals(Object obj) 5.clone() 6.toString() 7.notify()、notifyAll() 8.wait(long timeout)、wait(long timeout, int nanos)、wait() 9.finalize() 1.registerNatives() 源码: private static native void registerNatives ( ) ; static { registerNatives ( ) ; } 我对这个方法暂时还不太理解,后面我补回来!这个跟JNI有关,而我工作中会用到JNI,虽然现在还不会用,哈哈哈!! 2.getClass() 源码: public final native Class < ? > getClass ( ) ; 首先,这个方法是被 final 修饰的,你平时写一个类,可以通过那个类的对象调用Object的这个方法, 所以说,被 final 修饰的方法,是可以被继承的,但是不能被重写。 方法注释是这么说的: 什么是运行时类? 我们通过eclipse写一段代码,不调试和运行,把它保存起来,会变成一个后缀为 .java 的文件,我们把它叫做源文件

Java 容器 - 一文详解HashMap

扶醉桌前 提交于 2020-01-21 02:36:04
Map 类集合 Java Map类集合,与Collections类集合存在很大不同。它是与Collection 类平级的一个接口。 在集合框架中,通过部分视图方法这一根 微弱的线联系起来。 (在之后的分享中,我们会讨论到Collections 框架的内容) Map类集合中的存储单位是K-V键值对,就是 使用一定的哈希算法形成一组比较均匀的哈希值作为Key,Value值挂在Key上。 Map类 的特点: 没有重复的Key,可以具有多个重复的Value Value可以是List/Map/Set对象 KV是否允许为null,以实现类的约束为准 Map集合类 Key Value Super JDK 说明 Hashtable 不允许为 null 不允许为 null Dictionary 1.0 (过时)线程安全类 ConcurrentHashMap 不允许为 null 不允许为 null AbstractMap 1.5 锁分段技术或CAS(JDK8 及以上) TreeMap 不允许为 null 允许为 null AbstractMap 1.2 线程不安全(有序) HashMap 允许为 null 允许为 null AbstractMap 1.2 线程不安全(resize 死链问题) 从jdk1.0-1.5,这几个重点KV集合类,见证了Java语言成为工业级语言的成长历程。 知识点: Map

Java面试题1-Java基础

别等时光非礼了梦想. 提交于 2020-01-20 10:47:39
实例方法和静态方法有什么不一样 1.在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。 而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。 2.静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许 访问实例成员变量和实例方法,如果需要调用,则需要先实例化;实例方法则无此限制 3.静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被装载和分配。而非静态方法是 不加static关键字的方法,在类定义时没有占用内存,非静态方法只有在类被实例化成对象时,对象 调用该方法才被分配内存 Java中的异常有哪几类?分别怎么使用 Throwable是所有异常的根,java.lang.Throwable Error:错误,Java.lang.Error Exception:异常,java.lang.Exception Exception分为CheckedException和RuntimeException,所有RuntimeException类及其子类的实例 被称为Runtime异常,不属于该范畴的异常则被称为CheckedException checkedException: 只有Java语言提供了Checked异常,Java认为checked异常都是可以被处理的异常,