Java面经整理_Collection

本文详细解析了ArrayList、LinkedList、Vector的区别,以及HashSet与TreeSet的不同之处。此外,还对比了Hashtable与HashMap的特点,深入探讨了使用HashSet存储自定义对象时重写hashCode()和equals()方法的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()方法,目的是告诉程序去除重复元素的策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值