hashcode

Reflection 反射

主宰稳场 提交于 2020-01-13 12:55:20
目录 Reflection 反射 反射的定义 反射的作用 Class类 Class类的对象获取 Class API 反射操作泛型 反射操作注解 反射的性能问题 Reflection 反射 反射的定义 反射机制: 在程序运行时可以加载,探知,使用编译期间完全未知的类 程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个加载的类,都能够知道这个类的所有属性和方法;同时任意一个对象也都能够调用它的任意一个方法和属性。同时一个类只有一个反射对象,比如多次调用Class.forName得到的也是相同对象 形象的说: 使用以下反射代码来获取一个类的对象 Class c = Class.forName("com.company.project.ClassName"); 当加载完成后,堆内存中就产生了一个ClassName类型的对象,通过这个对象我们就可以看到类的结构,这个就时反射 反射的作用 动态加载类、动态获取类的信息(属性、方法、构造器) 动态构造对象 动态调用类和对象的任意方法、构造器 动态调用和处理属性 获取泛型信息 处理注解 Class类 public final class Class extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement

JDK动态代理与CGLIB动态代理

爱⌒轻易说出口 提交于 2020-01-13 08:23:24
JDK动态代理和CGLIB动态代理是SpringAOP非常重要的两个概念,SpringAOP是通过生成目标对象的代理类来实现对目标对象的增强,在说JDK的动态代理之前我们先来回顾一下静态代理: 一、静态代理: 首先定义一个业务接口 public interface ITestService { void sayHello(); String getMsg(); } 然后我们编写一个简单的实现类: public class TestServiceImpl implements ITestService{ @Override public void sayHello() { System.out.println("TestServiceImpl sayHello"); } @Override public String getMsg() { return "TestServiceImpl Msg"; } } 然后我们再编写一个代理类用来代理TestServiceImpl: public class TestServiceProxy implements ITestService { private ITestService target; public TestServiceProxy(ITestService testService) { this.target =

ArrayMap数据结构分析

◇◆丶佛笑我妖孽 提交于 2020-01-12 13:01:36
ArrayMap是Android上特有的一个性能比较高的Map,和HashMap一样,也实现了Map接口。 这里只分析其数据结构部分,不分析其高效缓存部分。 分析 ArrayMap的结构是int[] mHashes,记录每个key的hash值;Object[] mArray记录Key和Value,对于每一组Key和Value,按照Key和Value的顺序排列。 put(K,V)时,首先根据K计算出来一个Hash值,然后在mHashes中使用二分查找来查找这个Hash值,既然能使用二分查找也就是说,这个mHashs数组是有序的,得到了index后,再在mArray中查找,其中index 2表示key的位置,index 2+1表示value的位置。 mHashes虽然是个有序的,但却是可以重复的;对于重复的mHashs,在mArray中进行匹配时是通过Key#equals()方法来判断是否相同的。 举个例子: class SameHashObj(val num:Int){ override fun equals(other: Any?): Boolean { if (this === other) return true if (other !is SameHashObj) return false if (num != other.num) return false return

Implement “tolerant” `equals` & `hashCode` for a class with floating point members

天涯浪子 提交于 2020-01-12 04:52:08
问题 I have a class with a float field. For example: public class MultipleFields { final int count; final float floatValue; public MultipleFields(int count, float floatValue) { this.count = count; this.floatValue = floatValue; } } I need to be able to compare instances by value. Now how do I properly implement equals & hashCode ? The usual way to implement equals and hashCode is to just consider all fields. E.g. Eclipse will generate the following equals : public boolean equals(Object obj) { //

equal和hashcode

本小妞迷上赌 提交于 2020-01-12 04:00:58
引自 https://www.cnblogs.com/skywang12345/p/3324958.html =============================================== 本章的内容主要解决下面几个问题: 1 equals() 的作用是什么 ? 2 equals() 与 == 的区别是什么 ? 3 hashCode() 的作用是什么 ? 4 hashCode() 和 equals() 之间有什么联系? ============================================== 1. 根据“ 类是否覆盖equals()方法 ”,将它分为2类。 (01) 若某个类没有覆盖equals()方法,当它的通过equals()比较两个对象时,实际上是比较两个对象是不是同一个对象。这时,等价于通过“==”去比较这两个对象。 (02) 我们可以覆盖类的equals()方法,来让equals()通过其它方式比较两个对象是否相等。通常的做法是:若两个对象的内容相等,则equals()方法返回true;否则,返回fasle。 2. == : 它的作用是 判断两个对象的地址是不是相等。 即,判断两个对象是不试同一个对象。 equals() : 它的作用也是 判断两个对象是否相等。 但它一般有两种使用情况(前面第1部分已详细介绍过): 情况1

集合介绍

不羁岁月 提交于 2020-01-11 09:49:08
1 1:集合 2 Collection(单列集合) 3 List(有序,可重复) 4 ArrayList 5 底层数据结构是数组,查询快,增删慢 6 线程不安全,效率高 7 Vector 8 底层数据结构是数组,查询快,增删慢 9 线程安全,效率低 10 LinkedList 11 底层数据结构是链表,查询慢,增删快 12 线程不安全,效率高 13 Set(无序,唯一) 14 HashSet 15 底层数据结构是哈希表。 16 哈希表依赖两个方法:hashCode()和equals() 17 执行顺序: 18 首先判断hashCode()值是否相同 19 是:继续执行equals(),看其返回值 20 是true:说明元素重复,不添加 21 是false:就直接添加到集合 22 否:就直接添加到集合 23 最终: 24 自动生成hashCode()和equals()即可 25 26 LinkedHashSet 27 底层数据结构由链表和哈希表组成。 28 由链表保证元素有序。 29 由哈希表保证元素唯一。 30 TreeSet 31 底层数据结构是红黑树。(是一种自平衡的二叉树) 32 如何保证元素唯一性呢? 33 根据比较的返回值是否是0来决定 34 如何保证元素的排序呢? 35 两种方式 36 自然排序(元素具备比较性) 37 让元素所属的类实现Comparable接口 38

HashCode for Generic objects in Java

不羁岁月 提交于 2020-01-11 06:56:27
问题 I understand the idea of hashCode and why it's needed. However I'm confused about how hashCode is calculated for a Generic object. So here's my questions. If I've a String, I'd probably use the following function to calculate the hashCode, int hash = 7; for (int i = 0; i < strlen; i++) { hash = hash*31 + charAt(i); } But say I've the following object, class Node<K, V> { private K key; private V value; private Node<K, V> next; } My IDE generates an automated hashCode function for this,

2020年最新整理-Java面试题大全

梦想的初衷 提交于 2020-01-11 04:46:43
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了一套Java面试题,希望对大家有帮助哈~ 阅读本文预计需要12分钟 打算这几天每天更新15~20题。(这样有助于你们阅读和理解!)我们先从简单的开始 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。 2. == 和 equals 的区别是什么? == 解读 对于基本类型和引用类型 == 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同; 引用类型:比较的是引用是否相同; 代码示例: String x = "string"; String y = "string"; String z = new String("string"); System.out.println(x==y); // true System.out

java集合总结

元气小坏坏 提交于 2020-01-10 22:45:24
一、集合的由来   通常,我们的程序需要根据程序运行时才知道创建多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是数组只能放统一类型的数据,而且其长度是固定的,那怎么办呢?集合便应运而生了! 为了对集合有个更加深入的了解,可以看我的这一篇文章: 用 Java 数组来实现 ArrayList 集合 http://www.cnblogs.com/ysocean/p/6812674.html 二、集合是什么?   Java集合类存放于 java.util 包中,是一个用来存放对象的容器。 注意:①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。    ②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。    ③、集合可以存放不同类型,不限数量的数据类型。 发现一个特点,上述所有的集合类,除了 map 系列的集合,即左边集合都实现了 Iterator 接口,这是一个用于遍历集合中元素的接口,主要hashNext(),next(),remove()三种方法。它的一个子接口 ListIterator

What is alternative hashing for String keys in Java 8?

混江龙づ霸主 提交于 2020-01-10 13:41:28
问题 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:/