您的位置:首页 > 编程语言 > Java开发

Java面经整理_Collection

2017-12-11 14:41 267 查看
1.说出ArrayList、LinkedList、Vector的区别。

1.Arraylist底层采用数组方式存储数据,有索引,允许重复元素,适合查询,不适合插入删除。
2.LikedList底层采用双向链表存储数据,插入删除数据较快,查找慢。
3.Vector和ArrayList类似,使用了synchronized,是线程安全的,所以性能上比ArrayList差。


2.HashSet,TreeSet的区别

HashSet:

1.不能保证元素的排列顺序,顺序有可能发生变化
2.不是同步的
3.集合元素可以是null,但只能放入一个null
4.HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相等


TreeSet:

1.TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。
2.TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0。


3.Hashtable和HashMap的区别联系

1.HashMap不是线程安全的,是map的子接口,键不能重复,允许null。
2.HashTable是线程安全的,继承自Dictionary,键不能重复,不允许null,所以HashTable的性能是低于HashMap的。


**4.使用HashSet 存储自定义对象,为什么需要重写hashCode()和**equals()?

1.HashSet 存储用的哈希表结构,哈希表需要用到hashCode()和equals()方法:
hashCode()产生hash 值以计算内存位置;
当hash 值相同时要调用equals()方法进行比较。
2.如果不重写,调用的是Object 的hashcode,而Object 的hashCode 实际上是地址。系统类已经覆盖了hashCode 方法。
3.所以HashSet 存储自定义对象的化要重写hashCode()和equals()方法,目的是告诉程序去除重复元素的策略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: