博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中TreeSet集合如何实现元素的判重
阅读量:6589 次
发布时间:2019-06-24

本文共 2691 字,大约阅读时间需要 8 分钟。

1 /*  2 看一下部分的TreeSet源码....  3 public class TreeSet
extends AbstractSet
4 implements NavigableSet
, Cloneable, java.io.Serializable 5 { 6 private transient NavigableMap
m; 7 //NavigableMap继承SortedMap, 二者都是接口,在TreeMap中有实现 8 private static final Object PRESENT = new Object(); 9 10 TreeSet(NavigableMap
m) { 11 this.m = m; 12 } 13 第一种构造方法 14 public TreeSet(Comparator
comparator) { 15 this(new TreeMap<>(comparator)); 16 } 17 第二种构造方法 18 public TreeSet() { 19 this(new TreeMap
()); 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
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
parent; 39 // split comparator and comparable paths 40 Comparator
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
k = (Comparable
) 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
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
st = new TreeSet
(); 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
it = st.iterator(); it.hasNext();) 98 System.out.println(it.next()); 99 }100 }101 102 class myClass implements Comparable
{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 }

 

转载地址:http://vikio.baihongyu.com/

你可能感兴趣的文章
Direct2D教程(八)梯度色画刷
查看>>
Swift vs. Objective-C:未来看好 Swift 的十个理由
查看>>
Java 并发性和多线程
查看>>
IE6下frameset横向滚动条BUG
查看>>
UVA 10026 Shoemaker's Problem
查看>>
XAML 属性设置Windows Phone笔记
查看>>
springboot整合mybatis中的mapper不影响使用,但是总是提示红线
查看>>
微信助力活动表结构设计
查看>>
Linux平台安装MongoDB
查看>>
开源iphone项目
查看>>
敏捷开发--如何准确估算故事
查看>>
C#编写Windows服务程序图文教程
查看>>
Chrome 快捷键
查看>>
使用Android Studio时so文件打包不到APK中
查看>>
js中求水仙花数
查看>>
有一种蓝,是神往,是心醉,是心伤
查看>>
命令查看java的class字节码文件
查看>>
软件下载链接获取方法
查看>>
libopencv_shape.so.3.0: cannot open shared object file: No such file or directory 解决笔记
查看>>
Linux CentOS6.5下编译安装MySQL 5.6
查看>>