hashcode

JAVA - 容器详解

爷,独闯天下 提交于 2020-02-23 05:55:52
一、ArrayList 长度 可变数组 ,类似于c++ STL中的vector. 元素以 线性方式连续存储 ,内部允许存放重复元素。 允许对元素进行随机的快速访问,但是向ArrayList中 插入和删除元素的速度较慢 。 ArrayList是 非线程安全 的,若要成为线程安全,可以使用:List list=Collections.synchronizedList(new ArrayList()); 数组进行扩容时,会将老数组中的元素重新拷贝一份到新的数组中,每次数组容量的增长大约是其原容量的1.5倍。 这种操作的代价是很高的,因此在实际使用时,我们 应该尽量避免数组容量的扩张 。 当我们可预知要保存的元素的多少时,要在构造ArrayList实例时,就指定其容量,以避免数组扩容的发生。 二、LinkedList 内部采用 双向循环链表 实现,类似于c++ STL中的list. 插入和删除元素的速度较快 ,随机访问的速度较慢. LinkedList单独具有addFirst(),addLast(),getFirst(),getLast(),removeFirst()和removeLast()方法. 这些方法使得它 可以作为堆栈、队列和双向队列来 使用. LinkedList也是 非线程安全 的. 三、HashMap 基于哈希表的Map接口实现,类似于c++ STL中的unordered

C#学习(9)传值/输出/引用/数组/具名/可选参数,扩展方法

邮差的信 提交于 2020-02-23 04:45:40
传值参数 声明时不带修饰符的形参是传值参数,一个传值参数对应一个局部变量,只是它的初始值来自该方法调用所提供的相应实参。 namespace Parameters { class Program { static void Main ( string [ ] args ) { Student stu = new Student ( ) ; int y = 100 ; stu . AddOne ( y ) ; //101 传进来一个值,把值当作副本,然后只操作这个副本,对原本的值不受影响 Console . WriteLine ( y ) ; //100。 所以y打印结果为100 } } class Student { public void AddOne ( int x ) { x = x + 1 ; Console . WriteLine ( x ) ; } } } namespace Parameters { class Program { static void Main ( string [ ] args ) { Student stu = new Student ( ) { Name = "Tim" } ; SomeMethod ( stu ) ; //Tom Console . WriteLine ( stu . Name ) ; //Tim } public

不同字符串的hashcode可能相同

走远了吗. 提交于 2020-02-22 12:01:00
System.out.println("重地".hashCode()=="通话".hashCode());//结果为true hashcode()方法的返回值是int类型,当计算出的hashcode超过了int的范围,hashcode的准确性就不能保证了,所以不同字符的hashcode是有可能相同的。 public static int hashCode(byte[] value) { int h = 0; for (byte v : value) { h = 31 * h + (v & 0xff); } return h; } 来源: https://www.cnblogs.com/chenj-blog/p/12344704.html

一次性搞清楚equals和hashCode

試著忘記壹切 提交于 2020-02-22 00:28:08
  在程序设计中,有很多的“公约”,遵守约定去实现你的代码,会让你避开很多坑,这些公约是前人总结出来的设计规范。   Object类是Java中的万类之祖,其中,equals和hashCode是2个非常重要的方法。   这2个方法总是被人放在一起讨论。最近在看集合框架,为了打基础,就决定把一些细枝末节清理掉。一次性搞清楚! 下面开始剖析。 public boolean equals(Object obj)   Object类中默认的实现方式是 : return this == obj 。那就是说,只有this 和 obj引用同一个对象,才会返回true。(如果我们没有重写equals方法,equals和==一样比较的都是内存地址,只是equals可以让我们重写。)   而我们往往需要用equals来判断 2个对象是否等价,而非验证他们的唯一性。这样我们在实现自己的类时,就要重写equals. 按照约定,equals要满足以下规则。 自反性 : x.equals(x) 一定是true 对null : x.equals(null) 一定是false 对称性 : x.equals(y) 和 y.equals(x)结果一致 传递性: a 和 b equals , b 和 c equals,那么 a 和 c也一定equals。 一致性: 在某个运行时期间

eqauls和hashCode的对比

*爱你&永不变心* 提交于 2020-02-22 00:27:18
public boolean equals(Object obj) Object类中默认的实现方式是 : return this == obj 。那就是说,只有this 和 obj引用同一个对象,才会返回true。 而我们往往需要用equals来判断 2个对象是否等价,而非验证他们的唯一性。这样我们在实现自己的类时,就要重写equals. 按照约定,equals要满足以下规则: 自反性 : x.equals(x) 一定是true 对null : x.equals(null) 一定是false 对称性 : x.equals(y) 和 y.equals(x)结果一致 传递性 : a 和 b equals , b 和 c equals,那么 a 和 c也一定equals。 一致性 : 在某个运行时期间,2个对象的状态的改变不会不影响equals的决策结果,那么,在这个运行时期间,无论调用多少次equals,都返回相同的结果。 一个例子 class Test { private int num; private String data; public boolean equals(Object obj) { if (this == obj) return true; if ((obj == null) || (obj.getClass() != this.getClass()))

常见对象Object类

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-20 05:39:46
Object类的hashCode()方法 public int hashCode() a:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。 b:不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。 public class Demo1_HashCode { public static void main ( String [ ] args ) { Object object = new Object ( ) ; int hashCode = object . hashCode ( ) ; System . out . println ( hashCode ) ; } } Object类的getClass()方法(了解) public final Class getClass() a:返回此 Object 的运行时类。 b:可以通过Class类中的一个方法,获取对象的真实类的全名称。 * public String getName() public class demo_getClass { public static void main ( String [ ] args ) { Object obj = new Object ( ) ; Class cla = obj . getClass ( ) ; /

java面试题 -- 基础

醉酒当歌 提交于 2020-02-19 15:12:30
1.抽象和封装的不同点 抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看成是用来提供抽象的一种策略。 2.重载和重写的区别 重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方法。 3.字符型常量和字符串常量的区别 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符字符常量相当于一个整形值(ASCII值),可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放位置)字符常量只占一个字节 字符串常量占若干个字节(至少一个字符结束标志)4.成员变量与局部变量的区别有那些? 从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;但是,成员变量和局部变量都能被final所修饰;从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存

总结1.20

折月煮酒 提交于 2020-02-18 16:48:29
什么是ACID ACID,指数据库事务正确执行的四个基本要素的缩写。 包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。 原子性,指的是整个事务是一个独立的单元,要么操作成功,要么操作不成功 一致性,事务必须要保持和系统处于一致的状态(如果不一致会导致系统其它的方出现bug) 隔离性,事务是并发控制机制,他们的交错也需要一致性,隔离隐藏,一般通过悲观或者乐观锁实现 耐久性,一个成功的事务将永久性地改变系统的状态,所以在它结束之前,所有导致状态的变化都记录在一个持久的事务日志中 cookie和session区别 区别: 1、数据存放位置不同: cookie数据存放在客户的浏览器上,session数据放在服务器上。 2、安全程度不同: cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。 3、性能使用程度不同: session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。 4

Map源码会问哪些面试题

爷,独闯天下 提交于 2020-02-18 15:20:34
1 Map 整体数据结构类问题 1.1 说一说 HashMap 底层数据结构 答:HashMap 底层是数组 + 链表 + 红黑树的数据结构,数组的主要作用是方便快速查找,时间复杂度是 O(1),默认大小是 16,数组的下标索引是通过 key 的 hashcode 计算出来的,数组元素叫做 Node,当多个 key 的 hashcode 一致,但 key 值不同时,单个 Node 就会转化成链表,链表的查询复杂度是 O(n),当链表的长度大于等于 8 并且数组的大小超过 64 时,链表就会转化成红黑树,红黑树的查询复杂度是 O(log(n)),简单来说,最坏的查询次数相当于红黑树的最大深度。 1.2 HashMap、TreeMap、LinkedHashMap 三者有啥相同点,有啥不同点? 答:相同点: 三者在特定的情况下,都会使用红黑树; 底层的 hash 算法相同; 在迭代的过程中,如果 Map 的数据结构被改动,都会报 ConcurrentModificationException 的错误。 不同点: HashMap 数据结构以数组为主,查询非常快,TreeMap 数据结构以红黑树为主,利用了红黑树左小右大的特点,可以实现 key 的排序,LinkedHashMap 在 HashMap 的基础上增加了链表的结构,实现了插入顺序访问和最少访问删除两种策略; 由于三种 Map

collection(list,set,map)、HashMap

断了今生、忘了曾经 提交于 2020-02-18 02:53:39
collection里面有什么子类?(list和set是实现了collection接口的。)   List: 1.可以允许重复的对象(可重复,有序集合)。 2.可以插入多个null元素。 3.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。 ———————————————— Set: 1.不允许重复对象(不可重复,无序集合)。 2 只允许一个 null 元素 3.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序集合。而且可以重复。 ———————————————— Map: 1.Map不是collection的子接口或者实现类。Map是一个接口。 2.不允许重复元素。 3. Map 里你可以拥有随意个 null 值但只能有一个 null (key)键。 4. Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable