Hashcode的作用
hashCode主要是用于数据的查询快捷性。
两个对象的hashCode相同,但对象不一定相同;两个对象相同,其hashCode必然相同。
HashMap的hashcode的作用
用于确定对象在hashMap中存储的地址。
为什么重载hashCode方法?
重载equals方法时一定要重载hashCode方法。
1、为什么需要重载equals方法。
因为Object默认的equals方法是比较的两个对象的引用;意思就是指向同一内存,地址则相等,否则不相等;如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法。
2、为什么需要重载equals方法。
因为需要满足equals相同,则hashCode必须相同;hashCode相同,equals不一定相同的约定。在HashTable、HashMap、HashSet等等hash结构的集合时,保证数据的唯一性。
ArrayList、LinkedList、Vector的区别
ArrayList内部实现是一个数组,非线程安全。插入时只能存储到数组尾部
LinkedList的实现是一个双向链表,非线程安全。插入时,可以指定任意节点的前后位置。方法比ArrayList丰富。插入效率比ArrayList快。
Vector实现和ArrayList类似,但是线程安全。
String、StringBuffer与StringBuilder的区别
String是字符串常量,一旦创建后对象就不可改变。StringBuffer和StringBuild是对象,可以改变。
在对字符串进行操作时,如拼接时,StringBuffer和StringBuild处理效率优于String。StringBuffer是线程安全的,而StringBuild是非线程安全的。
Map、Set、List、Queue、Stack的特点与用法
Map是键值对的存储结构,键值key是唯一的,存储对象可以是一对一或N对1;
Set不可以存储重复元素,可以存储null;只能用Iterator实现单项遍历,Set中没有同步方法;
List比较常用的存储列表,有序集合。用Iterator实现单向遍历,也可用ListIterator实现双向遍历;
Queue遵从先进先出原则。 不允许有Null对象。使用时尽量避免add()和remove()方法,而是使用offer()来添加元素,使用poll()来移除元素,它的优点是可以通过返回值来判断是否成功。;
Stack遵从后进先出原则。
HashMap和HashTable的区别
HashMap非线程安全,可以存储null对象;
HashTable线程安全,不可以存储null;
JDK7与JDK8中HashMap的实现
JDK7中HashMap的实现是散链列表,一个数组+链表。
JDK8中则是数组+链表/红黑树的结构;当同一hashcode对象超过8个时,其所在的链表则转化为红黑树结构。
HashMap和ConcurrentHashMap的区别,HashMap的底层源码
HashMap非线程安全,可以存储null;
ConcurrentHashMap线程安全。
ConcurrentHashMap能完全替代HashTable吗
不能,两者的迭代器的一致性不同:HashTable使用的强一致性,而ConcurrentHashMap是弱一致性。比如ConcurrentHashMap中put一个数据,可能在一段时间内,get获取不到 。
网友评论