JAVA集合

HashSet 和 TreeSet 有什么区别

  • HashSet 不能保证元素的排列顺序,只能放入一个null,底层采用HashMap,采用哈希表实现;向集合中插入元素,先比较hashCode方法,在比较equals方法,若为false,则可以插入。
  • TreeSet 数据是排列好的,使用TreeMap实现,采用二叉树(红黑树)的数据结构,可以获取有序的序列,必须实现Comparable接口,使用compareTo方法,当往Set插入一个元素时候,调用compareTo方法,根据返回的结果,决定插入的位置。
    TreeSet是SortedSet接口的唯一实现类,支持2种排序,默认是自然排序(按照升序排列),还有定制排序

HashSet 的底层实现

底层是哈希表,特点:存储快
Hashset存储元素时,调用元素hashCode方法得到元素的哈希值,通过元素的哈希值经过位移等运算,就可以算出元素在哈希表中的存储位置。
1.如果算出的元素存储的位置没有任何元素存储,就直接存储在该位置上;

2.存在其他元素,调用equals方法比较,返回true,不允许添加。

LinkedHashMap 的实现原理

在HashMap存储结构的基础上,使用双向链表记录添加元素的顺序,按照插入的顺序从头部或者从尾部迭代,是有序的,多维护了一个双向链表,性能差点。

为什么集合类没有实现 Cloneable 和 Serializable 接口?

  • 集合类如果没有必要考虑克隆和串行化等一堆额外的特性,就不是纯粹的接口了;实现类都实现了这些接口,串行化和克隆也常用。

什么是迭代器 (Iterator)?

为了方便处理集合中的元素,java出现了一个对象,该对象提供了一些方法处理集合中的元素,该对象就叫迭代器。迭代器就是专门取出集合元素的对象,但是该对象比较特殊,不能直接创建对象,以内部类的形式存在于集合类的内部,取出方式的细节进行了封装。每一个容器都有取出元素的功能,功能都一样,只不过实现的具体方式不同(数据结构不一样),所以对共性的取出进行了抽取,出现了Iterator接口。

Iterator 和 ListIterator 的区别是什么?

相同点: 1.都可以遍历集合元素使用;2.集合中提供的内部方法
不同点: 1.Iterator不能对集合进行添加,修改操作;可以在所有集合中使用;2.ListIterator只能在list类型中使用,有add方法,可以定位当前索引的位置,可以进行set方法修改。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值