HashSet和TreeSet如何实现去重的呢?
下文笔者讲述HashSet和TreeSet实现去重的原理分享,如下所示
HashSet去重原理
由于hashSet底层是数组+链表+红黑树 当我们增加数据时,首先使用hashCode()获取一个hash值 然后根据hash值获取其索引(数组中的位置) 当索引处,没有元素时,则直接放入 当索引处,有元素,则使用equals对元素进行比较 相同时,则不加入 不相同时,则加入到元素后面
TreeSet去重原理
TreeSet的底层是TreeMap 新增数据时,将存入map的key的位置 value则为固定值PRESENT TreeSet中的元素是有序且不重复,由于TreeMap中key是有序且不重复的 当在构造TreeSet时,如果传入一个Comparator匿名对象,实现的compare去重 当返回0,则认为是相同的与元素,不添加 当你没有传入一个Comparator匿名对象,则以你添加的对象实现的Compareable接口的compareTo方法来去重 例: 新增值类型为String,会使用String中的compareTo()方法来比较两个String值是否相同,不同则添加。 当传进去的对象是自己定义的类,必须要实现Comparable接口,即实现了comparaTo方法,否则会报ClassCast异常
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。