一些常见的问题

HashMap和HashTable的区别

1,hashmap线程不安全,hashtable线程不安全

2,hashmap的key和value可以为null,hashtable不可以。

3,hashmap每次都用对象的hashcode,hashmap需要重新计算hashcode

4,hashmap继承自AbstractMap,hashtable继承自dicrionary,二者都实现map接口。

5,内部实现使用的数组初始化和扩容方式不同

HashTable在不指定容量的情况下的默认容量为11,而HashMap为16,Hashtable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂。
Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。

Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。

覆写equals为什么一定要覆写hashcode

因为当我们new两个对象,对象有相同的内容,我们覆写了equals,那么两者equals比较必然为true,但是hashcode都是object的,两者返回都是在内存中地址(其实并不是),所以hashcode是不同的,这就违背了java对equals和hashcode的规定:equals相同时hashcode必须相同。

hashCode是什么?

hashCode:散列码是由对象导出的一个整型值。散列码是没有规律的。类的hashCode()方法继承自Object类,因此每个对象都有一个默认的散列码,他的值为对象的存储地址(由对象的物理存储地址通过散列转换来的)。

hashcode的作用

1、hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;

2、如果两个对象相同,就是适用于equals(Java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;

3、如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;

4、两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”。

静态内部类和内部类的区别

1,静态内部类只能在定义该类的内部创建对象,内部类可以在外部类的外部创建对象

2,静态内部类只能访问外部类的静态的属性和方法,内部类拥有外部类的引用可以访问外部类的所有的属性和方法

3,静态内部类可以有静态的属性和方法,内部类不能有静态的属性和方法

final的用途

表示最终类,不能被继承。
1.final关键字提高了性能。JVM和Java应用都会缓存final变量。
2.final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
3.使用final关键字,JVM会对方法、变量及类进行优化。
用途:
1.常量,
2.多线程共享

在jdk1.5中,引入了泛型,泛型的存在是用来解决什么问题。

首先为什么要引入泛型。我们假定一种场景。有两个不同的数据类型,它们都需要做相同的业务逻辑。这时候由于数据类型不同,我们是不是得写两个方法来分别解决。但是有了泛型,我们不需要管传入的到底是哪种数据类型,

这时候可能会问,所以的类都继承于Object,使用Object可以完成同样的工作啊,为什么不使用Object呢。
1.使用Object。普通数据类型,拆箱和装箱都是需要性能的,如果是引用数据类型。Object需要与与之交互的实际数据类型进行强制转换。这个也是需要性能的
2.因为在java中,允许Object强制转换成其他任何对象,这将意味着你将失去编译期的类型安全。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值