java面试题:1. 关于集合的面试题

1. ArrayList、Vector和LinkedList的区别

list是有序集合,一共有三个实现类:ArrayList、Vector、LinkedList
(1). ArrayList

基于数组实现,增删慢、查询较快,线程非安全

该集合提供了增加(add)、删除(remove)和访问(get)功能,ArrayList必须是连续存储,执行中间插入或者删除时,插入或者删除的节点后的元素进行移动,所以不适合增删操作,查询和遍历是更合适的。ArrayList定义时不需要指定数组长度,当数组的长度超出存储长度时,ArrayList会创建一个新的更大的数组,并且将数组中的数据复制到这个更大的数组中。
(2). Vector

基于数组实现,增删慢、查询快,线程安全

Vector支持线程同步性,只允许一个线程进行操作,保证多线程环境下数据能够保持一致性,再次过程中需要不断的对Vector进行添加锁或者释放锁的操作,因此效率较ArrayList低一些。
(3). LinkedList

基于双链表实现,增删快、查询慢,线程非安全

执行查询操作时,需要从链表头部一致遍历到所查询的节点为止,所以访问效率慢一些,LinkedList可以操作头部和尾部,有时可以当作堆和栈使用。

2. 解释Set集合

Set集合的特性是独一无二的,适合存储没有顺序且值不相等的元素,Java会根据对象的内存地址计算出对象的HashCode值。判断两个元素是否相等,必须同时覆盖hashcode方法和equals方法,而且hashcode和equals方法的返回值必须相同。

3. HashSet的原理

HashSet存放的哈希值,元素的哈希值是通过元素的hashcode方法计算得到的,HashSet先判断两个元素的哈希值是否相等,如果为true,在通过equals方法比较,equals方法返回的值也为true,HashSet就会认为两个为同一个元素,equals方法为false,就视为不同的元素。

4. TreeSet是如何比较元素的

TreeSet基于二叉树实现的,根据添加的对象按照指定的顺序排序,每添加一个对象都会进行排序,并存入二叉树中,Integer和String等基础类型可以根据TreeSet的默认排序进行存储,自定义的数据类型必须实现Comparable接口,并覆盖compareTo函数才可以进行顺序存储,其中,覆写compareTo函数,则在this.对象小于指定对象的条件下返回-1,大于返回1,等于返回0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值