开篇介绍
大家好,我是Java面试题库的提裤姐,明天这篇是面试系列的第九篇,次要总结了JavaSE中汇合相干面试题,这篇是集系列的第二篇,次要解说Set汇合,第三篇次要解说Map汇合。在后续,会沿着第一篇开篇的常识线路始终总结上来,做到日更!如果我能做到百日百更,心愿你也能够跟着百日百刷,一百天养成一个好习惯。
List和Set的区别?
List,Set都是继承自Collection接口。都是用来存储一组雷同类型的元素的。
List特点:元素有放入程序,元素可反复 。
有程序,即先放入的元素排在后面。
Set特点:元素无放入程序,元素不可反复。
无程序,即先放入的元素不肯定排在后面。不可反复,即雷同元素在set中只会保留一份。所以,有些场景下,set能够用来去重。
留神:set在元素插入时是要有肯定的办法来判断元素是否反复的。这个办法很重要,决定了set中能够保留哪些元素。
Set如何保障元素不反复?
在Java的Set体系中,依据实现形式不同次要分为两大类。HashSet
和TreeSet
。
1、TreeSet 是二叉树实现的,Treeset中的数据是主动排好序的,不容许放入null值
2、HashSet 是哈希表实现的,HashSet中的数据是无序的,能够放入null,但只能放入一个null,两者中的值都不能反复,就如数据库中惟一束缚
在HashSet中,根本的操作都是有HashMap底层实现的,因为HashSet底层是用HashMap存储数据的。当向HashSet中增加元素的时候,首先计算元素的hashcode值,而后通过扰动计算和按位与的形式计算出这个元素的存储地位,如果这个地位位空,就将元素增加进去;如果不为空,则用equals办法比拟元素是否相等,相等就不增加,否则找一个空位增加。
TreeSet的底层是TreeMap的keySet(),而TreeMap是基于红黑树实现的,红黑树是一种均衡二叉查找树,它能保障任何一个节点的左右子树的高度差不会超过较矮的那棵的一倍。
TreeMap是按key排序的,元素在插入TreeSet时compareTo()办法要被调用,所以TreeSet中的元素要实现Comparable接口。TreeSet作为一种Set,它不容许呈现反复元素。TreeSet是用compareTo()来判断反复元素的。
HashSet实现原理?
1.基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap。封装了一个 HashMap 对象来存储所有的汇合元素,所有放入 HashSet 中的汇合元素实际上由 HashMap 的 key 来保留,而 HashMap 的 value 则存储了一个 PRESENT,它是一个动态的 Object 对象。
2.当咱们试图把某个类的对象当成 HashMap的 key,或试图将这个类的对象放入 HashSet 中保留时,重写该类的equals(Object obj)
办法和 hashCode()
办法,而且这两个办法的返回值必须保持一致:当该类的两个的 hashCode() 返回值雷同时,它们通过 equals() 办法比拟也应该返回 true。
通常来说,所有参加计算 hashCode() 返回值的要害属性,都应该用于作为 equals() 比拟的规范。
3.HashSet的其余操作都是基于HashMap的。
如何取到Set汇合中的第一个元素 ?
public static void main(String[] args) { Set set = new HashSet(); set.add("tracy"); set.add("hcx"); set.add(123); set.add(4.5); System.out.println(set);//[4.5, hcx, tracy, 123] //第一种办法 if(!set.isEmpty()){ System.out.println(set.iterator().next());// 4.5 } //第二种办法:将set汇合转换成list汇合 取第一个 List list = new ArrayList(set); System.out.println(list.get(0));// 4.5 }
TreeMap和TreeSet在排序时如何比拟元素?
TreeSet要求寄存的对象所属的类必须是实现Comparable
接口,该接口提供了比拟元素的compareTo
办法,当插入元素时会调该办法比拟元素的大小.TreeMap要求寄存的键值对映射的键必须实现Comparable
接口,从而依据键对元素进行排序。
Collection工具类中的sort办法如何比拟元素?
Collections工具类的sort办法有两种重载的模式,
第一种要求传入的待排序容器中寄存的对象比拟实现Comparable
接口以实现元素的比拟,
第二种不强制性的要求容器中的元素必须可比拟然而要求第二个参数,参数是Comparator
接口的子类型(须要重写compare
办法实现元素的比拟)相当一个长期定义的排序规定,其实就是通过接口注入比拟元素大小的算法,也是对回调模式的利用。