栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java】HashSet和TreeSet去重机制对比

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java】HashSet和TreeSet去重机制对比

HashSet和TreeSet去重机制对比

(1)HashSet的去重机制:hashCode( )+equals( ),底层先通过存入对象进行运算得到一个hash值,通过hash值得到对应的索引,如果发现table索引所在位置没有数据,就直接存放;如果有数据,就进行equals遍历比较,比较后,不相同就加入,否则就不加入。
(2)TreeSet的去重机制:如果传入了一个Comparator匿名内部类,就用实现的compare去重,如果方法返回0,就认为是相同的元素/数据,就不添加;如果没有传入一个Comparator匿名内部类,则以添加对象实现的Compareable接口的compareTo去重。

TreeSet源码分析 1、使用无参构造器,创建TreeSet

TreeSet treeSet = new TreeSet();
(1) 构造器把传入的比较器对象,赋给了TreeSet 的底层的TreeMap 的属性this.comparator

public TreeMap(Comparator comparator) {
this.comparator = comparator;
}

(2)在调用treeSet.add(“tom”), 在底层会执行到

if (cpr != null) {//cpr 就是我们的匿名内部类(对象)
do {
parent = t;
//动态绑定到我们的匿名内部类(对象)compare
cmp = cpr.compare(key, t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else //如果相等,即返回0,这个Key 就没有加入
return t.setValue(value);
} while (t != null);
}
2、使用有参构造器,创建TreeSet,传入一个Comparator匿名内部类
TreeSet treeSet = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
//下面调用String 的compareTo 方法进行字符串大小比较
//如果老韩要求加入的元素,按照长度大小排序
//return ((String) o2).compareTo((String) o1);
return ((String) o1).length() - ((String) o2).length();
}
});
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781754.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号