java集合之Set

HashSet集合:
1.实现了Set接口,基于HsahMap。
2.不保证输出顺序
3.允许使用null值,只能使用一次
4.实现是不同步的
5.不可以添加重复元素
6.相比于List集合,没有索引

------------------------------------------------------------------------
问题1:HashSet不允许添加重复元素,那么系统底层是如何判断元素是否重复的呢?
详情见博客:java中hasCode方法的作用----重复元素判断机制

TreeSet集合:
1.实现了Set接口,基于TreeMap ---- 二叉树存储结构,又叫红黑树
2.可排序的,依据自然排序和比较器
3.不是同步的
4.不可以使用null值,无法比较
5.不可以重复添加

1.对象数组进行排序时,sort一个参数的方法使用的是自然排序,两个参数的使用比较器进行排序。
2.TreeSet无参的构造方法默认使用自然排序来判断元素是否重复,有参的构造方法可以设置TreeSet使
  用比较器类来判断重复。

注意:TreeSet添加元素时:元素之间可以比较 -- 即:类型一致并且同时实现自然排序或比较器
TreeSet集合中添加自定义的类对象:那么要求该类必须实现自然排序或者比较器
即要实现comparable接口重写compareTo(Object obj)方法或者通过实现comparator接口来
创建该类的比较器类,重写compare(Object obj1, Object obj2)方法。

问题2:TreeSet不允许添加重复元素,那么如何判断是否为重复元素?
答:首先判断的标准和HashSet不一样,TreeSet添加元素时要进行比较(自然排序或者比较器),根据比较结果来判断是否重复,
如果返回0则代表重复,返回-1则代表不重复。

------------------------------------------------------------------------------------------
主要研究各集合在添加元素时的不同,因为其他操作方式基本一致:
1.添加元素时有什么限制
2.可不可以添加null值
3.添加时的底层实现
---------------------------------------------------------------------------------------
Collection和Collections的区别?
1.Collections可以看做操作集合的工具类和Arrays类似,而Collection是一个接口
面试题:Arrays中有一个将数组转换成List集合的方法asList()方法,
       但是转换为list集合后发现只能修改和查询,不能进行增删操作,这是为什么?
答:查看源码发现,他是通过使用内部类的方式新建了一个List的子类ArrayList,该静态内部类ArrayList和
    集合ArrayList类不是一个类,但是继承了同一个父类,区别是集合ArrayList重写了父类的所有增删改查
    的方法,但是该静态内部类只是重写了父类的增和删的方法,并没有重写父类的add和remove等方法,并且
    父类中的这些增和删的方法实现都是直接抛出异常的。
------------------------------------------------------------------------------------------
面试题:Comparable和Comparator的区别:
 本质:使用场景上的区别
 Comparable:当某个自定义的类或者其他的类不具备排序功能,并且代码可以修改,那么为该类添加排序
              功能有两种方式:
              1.该类实现Comparable接口,重写compareTo方法
              2.定义额外的实现Comparator的比较器类,重写compare方法。
   Comparator:当某个类不具有排序功能或者他的排序规则不是我们想要的,并且该类的代码不可修改,
              那么我们可以通过定义该类的比较器类来实现我们自己的排序规则。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智玲君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值