hashcode

Java对象的equals,hashCode方法

我与影子孤独终老i 提交于 2020-02-29 03:18:58
今天下午研究了半天hashcode()和equals()方法,终于有了一点点的明白,写下来与大家分享(zhaoxudong 2008.10.23晚21.36)。 1. 首先equals()和hashcode()这两个方法都是从object类中继承过来的。 equals()方法在object类中定义如下: public boolean equals(Object obj) { return (this == obj); } 很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们必需清楚,当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。比如在String类中如下: public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value;

大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)

 ̄綄美尐妖づ 提交于 2020-02-28 22:47:50
大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)案例分享 现在大部分的Spring项目都采用了基于注解的配置,采用了@Configuration 替换标签的做法。一行 简单的注解就可以解决很多事情。但是,其实每一个注解背后都有很多值得学习和思考的内容。这 些思考的点也是很多大厂面试官喜欢问的内容。 @Configuration处理类:org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition @Bean处理类:org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$ConfigurationClassBeanDefinition · 项目包结构 F:. ├─java │ └─com │ └─example │ └─demo4 │ │ Demo4Application.java │ │ │ ├─configuration │ │ PersonConfiguration.java │ │ StuConfiguration.java │ │ │ ├─controll │ │ StuController.java │ │ │ ├─dao │ │ StuDao

HashMap 如何解决hash冲突

落爺英雄遲暮 提交于 2020-02-28 13:36:02
在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样。 当程序试图将多个 key-value 放入 HashMap 中时,以如下代码片段为例: HashMap<String,Object> m=new HashMap<String,Object>(); m.put("a", "rrr1"); m.put("b", "tt9"); m.put("c", "tt8"); m.put("d", "g7"); m.put("e", "d6"); m.put("f", "d4"); m.put("g", "d4"); m.put("h", "d3"); m.put("i", "d2"); m.put("j", "d1"); m.put("k", "1"); m.put("o", "2"); m.put("p", "3"); m.put("q", "4"); m.put("r", "5"); m.put("s", "6"); m.put("t", "7"); m.put("u", "8"); m.put("v", "9"); HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。 当 程序执行 map.put(String,Obect)方法 时,系统将调用String的

走进JDK(五)------AbstractList

限于喜欢 提交于 2020-02-28 10:37:26
接下来的一段时间重点介绍java.util这个包中的内容,这个包厉害了,包含了collection与map,提供了集合、队列、映射等实现。一张图了解java中的集合类: AbstractList 一、list简介 list是啥?为啥会有list的存在呢?java中的数组相信大家都是非常熟悉的,可以存放多个数据,但是数组有一个缺点,就是数组在创建之后,长度就不可更改(但是针对于数组的元素可以更改),若你需要在后续过程中往数组中添加数据,那麻烦了,不支持。 list在java中是collection(集合)的子接口,运行过程中可以增加元素或是减少元素。List里存放的对象是有序的(有序不是指按照元素的大小排列,是按照元素添加顺序为维度的,例如第一个被添加的元素,get的时候就第一个被拿出来),同时也是可以重复的。 二、AbstractList类定义 public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> protected AbstractList() {} 成员变量: //代表修改次数 protected transient int modCount = 0; 三、主要方法 1、add()、addAll() //把一个元素加进list public boolean

数据结构和对应的集合

試著忘記壹切 提交于 2020-02-26 22:18:11
栈结构和队列结构 栈: 先进后出。 队列: 先进先出。 6.数组和链表 数组: 在内存中是一片连续的空间。 查询快,增删慢。 查询快:因为可以通过数组的地址值和索引直接定位到某个元素。 增删慢:因为数组不可变,每次要添加或者删除都要创建一个新的数组。 把老数组中的元素赋值给新数组。 链表: 是多个节点组成的。 每一个节点都是单独new出来的对象,在内存中链表不是一个连续的空间。 是通过互相记录地址值实现的。 单向链表: 前一个记录后一个地址值。 但是后一个不会记录前一个地址值。 双向链表 也是由节点组成的。 前一个记录后一个地址值。 后一个也会记录前一个。 7.ArrayList 和 LinkedList ArrayList : 底层是一个数组。 特点:查询快,增删慢 LinkedList : 底层是一个双向链表。 特点:查询慢,增删快 总结: ArrayList 和 LinkedList 基本使用是一模一样的。 增 删 改 查,所写代码几乎一样。 但是在底层数据结构是不一样的。 8.LinkedList void addFirst(E e) 向集合中第一个位置添加元素 void addLast(E e) 向集合中最后一个位置添加元素 E getFirst() 获取集合中第一个元素 E getLast() 获取集合中最后一个元素 E removeFirst() 删除集合中第一个元素

Hashmap 扩容

谁说我不能喝 提交于 2020-02-26 14:42:17
一、hashmap的数据结构 要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,hashmap也不例外。Hashmap实际上是一个数组和链表的结合体(在数据结构中,一般称之为“链表散列“),请看下图(横排表示数组,纵排表示数组元素【实际上是一个链表】)。 从图中我们可以看到一个hashmap就是一个数组结构,当新建一个hashmap的时候,就会初始化一个数组。我们来看看java代码: Java代码 /** * The table, resized as necessary. Length MUST Always be a power of two. * FIXME 这里需要注意这句话,至于原因后面会讲到 */ ransient Entry[] table; static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; final int hash; Entry<K,V> next; .......... } 上面的Entry就是数组中的元素,它持有一个指向下一个元素的引用,这就构成了链表。 当我们往hashmap中put元素的时候

Map and HashMap

浪尽此生 提交于 2020-02-25 23:44:12
1.1.1. Map 接口 java提供了一组可以以键值对(key-value)的形式存储数据的数据结构,这种数据结构称为Map。我们可以把Map看成一个多行两列的表格,其中第一列存放key,第二列存放value。 而每一行就相当于一组key-value对,表示一组数据。 Map对存入的元素有一个要求,就是key不能重复,所谓不能重复指的是在Map中不能包含两个equals为true的key。 Map对于key,value的类型没有严格要求,只要是引用类型均可。但是为了保证在使用时不会造成数据混乱,通常我们会使用泛型去约束key与value的类型。 1.1.2. put方法 既然我们知道了Map在保存数据时实际上是存入了两部分信息的 ,key与value。那么我们来看看如何向Map中存入数据。 Map提供了一个方法: V put ( K k , V v ) 该方法的作用是将key-value对存入Map中,因为Map中不允许出现重复的key,所以若当次存入的key已经在Map中存在,则是替换value操作,而返回值则为被替换的元素。若此key不存在,那么返回值为null。 1.1.3. get方法 我们学会了如何向Map中存入数据,那么我们再来看看如何获取数据。Map中获取数据的方式是给定Key获取对应的Value。 Map提供了一个方法: V get ( Object key )

JAVA面试题及参考分析-JAVA基础篇-2

浪子不回头ぞ 提交于 2020-02-25 19:25:52
13.构造器(constructor)是否可被重写(override)? 构造方法是不能被子类重写的,但是构造方法可以重载 简单的讲,就是说一个类可以有多个构造方法。 String, StringBuffer StringBuilder的区别 String 的长度是不可变的;StringBuffer的长度是可变的,线程安全;如果对一个字符串要经常改变的话,就一定不要用String,否则会创建许多无用的对象出来.15.HashMap的工作原理是什么? HashMap内部是通过一个数组实现的,只是这个数组比较特殊,数组里存储的元素是一个Entry实体(在JAVA8中为Node),这个Entry实体主要包含key、value以及一个指向自身的next指针。 HashMap是基于hashing实现的,当进行put操作时,根据传递的key值得到它的hashcode,然后再用这个hashcode与数组的长度进行模运算,得到一个int值,就是Entry要存储在数组的位置(下标);当通过get方法获取指定key的值时,会根据这个key算出它的hash值(数组下标),根据这个hash值获取数组下标对应的Entry,然后判断Entry里的key,hash值或者通过equals()比较是否与要查找的相同,如果相同,返回value,否则的话,遍历该链表(有可能就只有一个Entry,此时直接返回null)

Feature hashing in R for Text classification

佐手、 提交于 2020-02-24 09:14:49
问题 I'm trying to implement feature hashing in R to help me with a text classification problem, but i'm not sure if i'm doing it the way it should be. Part of my code is based on this post: Hashing function for mapping integers to a given range?. My code: random.data = function(n = 200, wlen = 40, ncol = 10){ random.word = function(n){ paste0(sample(c(letters, 0:9), n, TRUE), collapse = '') } matrix(replicate(n, random.word(wlen)), ncol = ncol) } feature_hash = function(doc, N){ doc = as.matrix

Day9 Object类以及一些常用类

时光毁灭记忆、已成空白 提交于 2020-02-23 19:17:47
一、Object类 Object类是所有类、数组、枚举类的父类,也就是说,Java允许把任何类型的对象赋给Object类 型的变量。当定义一个类时没有使用extends关键字为它显式指定父类,则该类默认继承O^ect父类。 因为所有的Java类都是Object类的子类,所以任何Java对象都可以调用Object类的方法。Object 类提供了如下几个常用方法。 boolean equals(Object obj):判断指定对象与该对象是否相等。此处相等的标准是,两个对象是 同一个对象,因此该equals。方法通常没有太大的实用价值。 protected void finalizeO:当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源。 int hashCode():返回该对象的hashCode值。在默认情况下,Object类的hashCodeO方法根据该 对象的地址来计算(即与System.identityHashCode(Object x)方法的计算结果相同)。但很多类都重写了 Object类的hashCode方法,不再根据地址来计算其hashCode()方法值。 String toStringO:返回该对象的字符串表示,当程序使用System.out.printlnO方法输出一个对象,或者把某个对象和字符串进行连接运算时