java中TreeSet集合如何实现元素的判重

  1 /*
  2 看一下部分的TreeSet源码....
  3 public class TreeSet<E> extends AbstractSet<E>
  4     implements NavigableSet<E>, Cloneable, java.io.Serializable
  5 {
  6     private transient NavigableMap<E,Object> m;
  7     //NavigableMap继承SortedMap, 二者都是接口,在TreeMap中有实现
  8     private static final Object PRESENT = new Object();
  9 
 10     TreeSet(NavigableMap<E,Object> m) {
 11         this.m = m;
 12     }
 13     第一种构造方法
 14     public TreeSet(Comparator<? super E> comparator) {
 15         this(new TreeMap<>(comparator));
 16     }
 17     第二种构造方法
 18     public TreeSet() {
 19         this(new TreeMap<E,Object>());
 20     }
 21     ..........
 22     public boolean add(E e) {
 23         return m.put(e, PRESENT)==null;
 24 
 25     /*
 26         再看一下 TreeMap 中是如何实现的 put()函数的
 27         public V put(K key, V value) {
 28         Entry<K,V> t = root;
 29         if (t == null) {
 30             compare(key, key); // type (and possibly null) check
 31 
 32             root = new Entry<>(key, value, null);
 33             size = 1;
 34             modCount++;
 35             return null;
 36         }
 37         int cmp;
 38         Entry<K,V> parent;
 39         // split comparator and comparable paths
 40         Comparator<? super K> cpr = comparator;
 41         if (cpr != null) {
 42             do {
 43                 parent = t;
 44                 cmp = cpr.compare(key, t.key);
 45                 if (cmp < 0)
 46                     t = t.left;
 47                 else if (cmp > 0)
 48                     t = t.right;
 49                 else
 50                     return t.setValue(value);
 51             } while (t != null);
 52         }
 53         else {
 54             if (key == null)
 55                 throw new NullPointerException();
 56             Comparable<? super K> k = (Comparable<? super K>) key;
 57             do {
 58                 parent = t;
 59                 cmp = k.compareTo(t.key);
 60                 if (cmp < 0)
 61                     t = t.left;
 62                 else if (cmp > 0)
 63                     t = t.right;
 64                 else
 65                     return t.setValue(value);
 66             } while (t != null);
 67         }
 68         Entry<K,V> e = new Entry<>(key, value, parent);
 69         if (cmp < 0)
 70             parent.left = e;
 71         else
 72             parent.right = e;
 73         fixAfterInsertion(e);
 74         size++;
 75         modCount++;
 76         return null;
 77     }
 78     */
 79     }
 80 }
 81 
 82 也就是说TreeSet内部实现使用TreeMap这个类来完成的
 83 TreeSet的内部实现元素之间是否相等?
 84 如果指定了Comparator(也就是利用第一种构造方法), 那么就用其中的compare方法进行比较
 85 否则就用Comparable中的compareTo()方法进行元素的比较
 86 */
 87 
 88 import java.util.*;
 89 public class CompTest{
 90     public static void main(String args[]){
 91         Set<myClass> st = new TreeSet<myClass>();
 92         st.add(new myClass(1, "fd"));
 93         st.add(new myClass(2, "fff"));
 94         st.add(new myClass(2, "tttt"));
 95         st.add(new myClass(1, "fd"));
 96 
 97         for(Iterator<myClass> it = st.iterator(); it.hasNext();)
 98             System.out.println(it.next());
 99     }
100 }
101 
102 class myClass implements Comparable<myClass>{
103 
104    public int x;
105    public String name;
106    public myClass(int x, String name){
107        this.x=x;
108        this.name=name;
109    }
110    public int compareTo(myClass tmp){
111        if(this.x==tmp.x)
112           return this.name.compareTo(tmp.name);
113        else return this.x-tmp.x;
114    }
115   
116    public String toString(){
117       return x+" "+name;
118    }
119 }

 

转载于:https://www.cnblogs.com/hujunzheng/p/3814902.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php中改变函数路由,通过PHP重启路由器以更换IP(原创)

在采集大批量数据时常常会触发对方服务器的“自我保护”&#xff0c;请求过于频繁就限制访问。这时需要停留很长一段时间(十几分钟到几十分钟不等)才能恢复访问&#xff0c;这样采集数据的速度就受到非常大的限制。解决方法有两个&#xff1a;1 通过图片识别绕过验证码机制&…

axure 画小程序效果图_APP详情页如何用Axure画出来

详情页是App原型中比较复杂的页面类型&#xff0c;熟悉它的常用套路有助于快速画出。之前的文章已经讲解了APP常见功能中的页面模板、下导航、上导航、列表页怎么画出来&#xff0c;请继续关注浪子教你画APP原型后续的其他功能模块。APP详情页往往包含上导航&#xff0c;内容区…

HashSet中实现不插入重复的元素

/* 看一下部分的HashSet源码.... public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, java.io.Serializable {static final long serialVersionUID -5024744406713321676L;private transient HashMap<E,Object> map;privat…

tuxedo错误码6_TUXEDE返回的所有错误代码

TUXEDE返回的所有错误代码tuxedo/include/atmi.h定于了TUXEDE返回的所有错误代码。/** tperrno values - error codes* The man pages explain the context in which the following error codes* can return.*/#define TPMINVAL 0 /* minimum error message */#define TPEABORT…

java中finally和return的执行顺序

注意&#xff1a;return的位置。。。从这几个例子中可以看到&#xff0c;如果try之前没有有条件的return&#xff0c;则try..catch..finally语句块中的语句都是顺序执行&#xff08;如果try中或者catch中 有return语句&#xff0c;那么先执行该return&#xff0c;然后执行final…

oracle如何设置权限,ORACLE的权限设置

创建用户create user abc identified by 123;----------------------------------------------------授权grant create session,create table to abcgrant create sysdba to database----------------------------------------------------然后conn abc密码&#xff1a;123----…

有关try..catch..finally处理异常的总结

//看一下下面的程序&#xff0c;你能正确的写出不同的testEx2()方法时&#xff0c;程序的最终打印出来的数据吗....先不要看下面的答案 public class ExceptionTest { public ExceptionTest() { } boolean testEx() throws Exception { boolean ret true; try { ret te…

oracle key的含义,v$session SERIAL#字段的含义

liyx&#xff1a;#!/bin/bash||#Write by liyx||||#数据库服务器地址||DBHOSTlocalhost||#数据库登录名||USERNAMEroot||#数据库密码||PASSWORDroot||#需要备份的数据库 或 输入类似 db1 db2 的列表清单 例 DBNAMES"all"||DBNAMES"ess_simple"||#备份MYSQL…

java.util.Scanner简单应用

import java.util.Scanner; import java.io.*; public class FileScannerTest{public static void main(String args[]){ //**************Scanner 的一般用//1.public Scanner(InputStream source),利用InputStream 对象进行构造Scanner myScanner1 new Scanner(System.in);w…

oracle能查dml记录么,如何查询DML操作的详细记录

可以通过flashback_transaction_qurey视图查询eg:SQL> desc flashback_transaction_queryName Null? Type----------------------------------------- -------- ----------------------------XID …

krpano 场景切换 通知_一个基于Vulkan的异步场景加载设计

异步场景加载基本流程验证完成。此方法理论上只需要使用3个Vulkan的指令队列。对于移动平台上的Vulkan&#xff0c;指令队列数量极少&#xff0c;比如Adreno640只有3个指令队列可用。所以理论上这一设计也适合目前的移动平台使用。(1) graphic_queue&#xff1a;用于完成当前场…

oracle 数据库回闪,各种数据库闪回的总结

本帖最后由 guoyJoe 于 2013-3-26 21:15 编辑一、Fashback Query闪回查询:Books-->APP-->Application Developers Guide - Fundamentals-->Flashback&#xff11;、应用Flashback Query查询过去的数据select * from t1 as of scn 44545454;select * from t1 as of tim…

poj 2528 Mayor's posters(线段树+离散化)

1 /*2 poj 2528 Mayors posters 3 线段树 离散化4 5 离散化的理解&#xff1a;6 给你一系列的正整数&#xff0c; 例如 1&#xff0c; 4 &#xff0c; 100&#xff0c; 1000000000&#xff0c; 如果利用线段树求解的话&#xff0c;很明显7 会导致内存的耗尽。所以我们做一…

汉仪尚巍手书有版权吗_为什么“汉仪尚巍手书”会大行天下?

昨夜&#xff0c;我写了篇文章《莫选最丑尚巍体&#xff0c;要选美丽中国字&#xff01;》发到朋友圈、微信群里&#xff0c;得到了一些朋友的反馈&#xff0c;有位朋友居然还认识尚巍&#xff0c;把他的微信推给了我。我加了尚巍的微信&#xff0c;待他通过后&#xff0c;便连…

如何查询linux服务器的网卡,Linux服务器如何查看有没有无线网卡

还是实验室那台服务器&#xff0c;连不上网。有没有界面&#xff0c;所以想着如何用一些命令来链接上热点。当然&#xff0c;在Linux下链接wifi没有win下那么一点就好了&#xff01;首先我们需要的基本条件就是&#xff1a; 服务器上有无线网卡。[roottomato2 ~]# iwconfiglo n…

java中如何生成可执行的jar文件

java中如何生成可执行的jar文件最简单的方法就是&#xff1a;jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$myAct ionListener.class CardLayoutDemo.class myClosingListener.class myPanel.class jar命令为java自带的专用打包工具&#xff1b; c…

ecs硬盘数据迁移_阿里云ECS新增数据盘以及迁移数据方法

第一、检查数据占用以及数据盘我们从探针可以看到&#xff0c;本身有30GB的硬盘只用到不到10GB&#xff0c;而且系统和WDCP面板/网站都系统盘中。通过fdisk -l 我们可以看到还有21GB的没有格式化和挂载&#xff0c;系统只用到10.7GB。第二、对数据盘分区fdisk /dev/xvdb第三、查…

linux文件浏览 ls,linux浏览文件命令

在linux下我们要浏览文件的内容&#xff0c;可以通过相关的命令来执行操作&#xff0c;下面由学习啦小编为大家整理了linux下浏览文件命令的相关知识&#xff0c;希望对大家有所帮助!linux浏览文件命令1.cat[功能说明]查看文件的内容#cat本身是一个串接命令&#xff0c;把指定一…

python的多行语句可以使用反斜杠_python 为什么不用分号作终止符?

作者&#xff1a;豌豆花下猫 来源&#xff1a;Python猫一般而言&#xff0c;编程语言中使用分号“;”来实现两种目的&#xff1a;作为语句分隔符&#xff1a;使用分号来分隔语句&#xff08;statement&#xff09;&#xff0c;这样就能在一行代码中书写多条语句&#xff08;一行…

linux dlopen 内存,Linux下加载库的有关问题(dlopenm, dlsym)

Linux下加载库的问题(dlopenm, dlsym)如题&#xff0c; 程序中发现load库成功&#xff0c;但是加载函数的时候报错: undefined symbol functionname是很简单的一个东西&#xff0c;因为不熟悉&#xff0c;所以老是弄不好&#xff0c;请各位指导&#xff01;代码如下&#xff1a…