Java面试题(2)

重载和重写

重写:重新写一遍,即子类继承父类,把父类方法重新实现,方法名、参数列表、返回类型相同,但方法访问修饰符比父类大,抛出异常比父类小

重载:方法名相同,参数不同,例参数顺序、参数个数、参数类型,返回值可同可不同,多态的表现

equals和==

==:比较是否是同一个对象,判断引用的地址是否相同;注意,如果是阿拉伯数字比较,值相等则为true

equals:继承父类Object的方法,如果该对象没有重写该方法,那么就使用父类的,即比较值,注意,常量放在equals前面,防止null调用equals方法,空指针

HashCode

问题:Set如何去重,如果都用equals方法比较,元素过多时,方法比较慢

解决:哈希码,根据哈希码分组,这样就知道每个对象对应那个区域,例:一个新元素添加进来,根据对象内存地址换算出来一个值(哈希码),然后找到对应存储区域,判断是否有元素,有则使用equals比较,相同的话就不存

String、StringBuilder和StringBuffer

String:底层final修饰的char[],即每次+"hello"新元素,都会创建跟原字符串相同的StringBuilder对象,然后调用append方法

StringBuilder:底层char[],继承AbstractStringBuilder,线程不安全

StringBuffer:底层char[],继承AbstractStringBuilder,线程安全,对方法加了synchronized

ArrayList和LinkedList

Array数组基于index的数据结构,查询效率高,O(1),缺点:如果删除元素,则需要后面元素前移,数组创建必须知道容量

ArrayList.toArray()方法变成数组,Arrays.asList()变成List

ArrayList:容量自动增长的数组

LinkedList:底层双向链表,添加、删除效率高于ArrayList,而setget低于ArrayList

HashMap和HashTable

父类:HashMap父类AbstractMapHashTable父类Dictionary

方法:HashTable多两个方法elementscontains,其中elements继承父类的方法,返回所有valuecontains判断value是否存在

null的支持:HashTable不支持,HashMapkey只能有一个null,保证key唯一,而value可以有多个null

安全性:HashTable方法上有synchronized,安全,而HashMap不安全,支持单线程,效率比HashTable高,HashTable可以适用于多线程,但多线程情况下可以使用ConcurrentHashMap,分段锁,不对整个数据锁定,效率比多线程下的HashTable

计算hash值方法不同

初始容量大小和扩容大小不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值