java TreeSet 实现存自定义不可重复数据
本文主要是介绍一下java集合中的比较重要的Set接口下的可实现类TreeSet
TreeSet类,底层用二叉树的数据结构
* 集合中以有序的方式插入和抽取元素。
* 添加到TreeSet中的元素必须是可以排序的
* 保证数据的唯一性:
* 第一种:让添加的类自身具有可比较性,
* 实现Comparable接口中的CompareTo()方法
package com.tercher.demo; import java.util.Iterator;
import java.util.TreeSet; public class TreeSetDemo {
public static void main(String[] args) { /*
* TreeSet类,底层用二叉树的数据结构
* 集合中以有序的方式插入和抽取元素。
* 添加到TreeSet中的元素必须是可以排序的
* 保证数据的唯一性:
* 第一种:让添加的类自身具有可比较性,
* 实现Comparable接口中的CompareTo()方法
* 第二种:当元素自身不具备可比较性时,
* 或者具备的比较是不需要的,
* 此时,可以自定义一个比较器(类)
* 此类实现Comparator中的CompareTo()方法
* 最后在实例化TreeSet时传参数比较器类
*/
TreeSet ts = new TreeSet();
ts.add(new Wimen("xiaobai", 10));
ts.add(new Wimen("xiaobai1", 14));
ts.add(new Wimen("xiaobai2", 5));
ts.add(new Wimen("xiaobai2", 5));
ts.add(new Wimen("xiaobai3", 34)); Iterator<Wimen> it = ts.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
} }
/*
* 添加类中实现Comparable方法中CompareTo()方法
* 按对象的年龄进行排序存储,并把相同的属性的对象剔除
*/ class Wimen implements Comparable{
private String name;
private int age; public Wimen(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Wimen [age=" + age + ", name=" + name + "]";
}
@Override
public int compareTo(Object o) {
if (!(o instanceof Wimen)) {
throw new ClassCastException("对象不匹配!!1");
}
Wimen wimen = (Wimen) o;
if (this.age > wimen.age) {
return 1;
}
if (this.age==wimen.age ) {
return this.name.compareTo(wimen.name);
}
return -1; // 1: 正序 0: 只存放第一个元素 -1: 倒序
} }
首先建立一个添加的类型,如下定义,让元素自身具备可比较性
* 添加类中实现Comparable方法中CompareTo()方法
* 按对象的年龄进行排序存储,并把相同的属性的对象剔除
然后再建立一个类,在里面的main方法中创建TreeSet集合,并添加Wimen类对象
结果图如下。可以看到TreeSet集合在调用add()时,内部就自动的调用了添加对象的CompareTo()方法,
并对年龄进行了排序,还对相同属性的对象进行剔除。

* 第二种:自定义一个比较器(类)
* 此类实现Comparator中的CompareTo()方法
* 最后在实例化TreeSet时传参数比较器类
package com.tercher.demo; import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet; public class TreeSetDemo2 {
public static void main(String[] args) { TreeSet ts = new TreeSet(new MyCom());
ts.add(new Wimen2("xiaobai", 10));
ts.add(new Wimen2("xiaobai1", 14));
ts.add(new Wimen2("xiaobai1", 14));//除去重复的,按年龄大小存储
ts.add(new Wimen2("xiaobai2", 5));
ts.add(new Wimen2("xiaobai3", 34)); Iterator<Wimen> it = ts.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
//定义一个比较器。
class MyCom implements Comparator{
@Override
public int compare(Object o1, Object o2) {
Wimen2 w1 = (Wimen2)o1;
Wimen2 w2 = (Wimen2)o2;
if (w1.getAge()>w2.getAge()) {
return 1;
}
if (w1.getAge()==w2.getAge()) {
return w1.getName().compareTo(w2.getName());
}
return -1;
} } class Wimen2{
private String name;
private int age; public Wimen2(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Wimen2 [age=" + age + ", name=" + name + "]";
} }

java TreeSet 实现存自定义不可重复数据的更多相关文章
- 小马哥的 Java 项目实战营学习笔记(1)
小马哥的 Java 项目实战营 小马哥的 Java 项目实战营 第二节:数据存储之 JDBC JDBC 核心 API 数据源 接口 - javax.sql.DataSource获取方式 1.普通对象初 ...
- Java实现数组去除重复数据的方法详解
一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer ...
- JAVA数组去除重复数据
一.用List集合实现 , , , , , , ,}; List<Integer> list = new ArrayList<Integer>(); ; i<str. ...
- Distinct删除重复数据时 自定义的方法比较【转】
最近项目中在用Linq Distinct想要将重复的资料去除时,发现它跟Any之类的方法有点不太一样,不能很直觉的在呼叫时直接带入重复数据判断的处理逻辑,所以当我们要用某个成员属性做重复数据的判断时, ...
- Java里List取并集方法retainAll不能用来判断是否有重复数据!
网上找的源码 public boolean retainAll(Collection<?> c){ boolean modified = false; Iterator&l ...
- java 去除数组重复数据,并输出重复数据值
/** * 去除重复数据 * @author Sunqinbo */ public class RemoveDuplicateData { public static void main(String ...
- [leetcode]380. Insert Delete GetRandom O(1)设计数据结构,实现存,删,随机取的时间复杂度为O(1)
题目: Design a data structure that supports all following operations in average O(1) time.1.insert(val ...
- Android开发之适配器-ListView适配器的重复数据
适配器是Android中的数据与View视图的桥梁,作用就是将数据通过适配器显示到对应的View视图上. 工作中,在用ListView做适配器数据时候,有些人肯定碰见过,如何优化效率,但是又出现重复数 ...
- 手把手教你如何用java8新特性将List中按指定属性排序,过滤重复数据
在java中常常会遇到这样一个问题,在实际应用中,总会碰到对List排序并过滤重复的问题,如果List中放的只是简单的String类型过滤so easy,但是实际应用中并不会这么easy,往往List ...
随机推荐
- docker安装MySQL软件
1 搜索mysql镜像 $ sudo docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a wi ...
- MACD 的数学解释
目录 MACD 的数学解释 MACD 的一般定义 引入延迟算子 Taylor 展开 权重分析 共振? MACD 的数学解释 MACD 的一般定义 \[ \begin{align*} DIF & ...
- springboot设置日志级别时报错
配置springboot日志,输出级别为info,运行时报错: Caused by: org.springframework.boot.context.properties.bind.BindExce ...
- JQuery的get、post、ajax方法
1.jQuery $.get() 方法 $.get() 方法通过 HTTP GET 请求从服务器上请求数据. jQuery.get( url, [data], [callback] ): 参数: ...
- C#集合之可观察的集合
如果需要集合中的元素何时删除或添加的信息,可以使用ObservableCollection<T>类.这个类是为WPF定义的,这样UI就可以得知集合的变化.这个类在程序集WindowsBas ...
- Luogu - P3384 树链剖分 [挂模板专用]
题意:请码个树剖模板支持子树区间加/查询和路径加/查询 纯练手 盲敲技能++ 以后网络赛复制模板速度++++ 对链操作时注意方向 #include<bits/stdc++.h> #defi ...
- TD-LTE技术原理与系统设计
王映民 等.人邮2010 E-UTRAN E-NodeB 无线资源管理承载 路由到SGW IP头压缩加密 UE附着MME选择 寻呼 广播 测量 EPC SGW 移动性管理 路由转发 终止寻呼 监听 ...
- 针对ACM输出格式的一个小技巧(对格式错误说不!)
printf("%d%c",bmax," \n"[i==n]); 上文中bmax为题目中需要输出的整形变量,可以脑补很多ans,max之类的,重点在于%c和后面 ...
- Shiro入门指引
最近项目中用到Shiro,专门对其研究了一番,颇有收获,以下是笔者最近写的博客,希望对大家入门有所帮助. Shiro入门资源整理 Shiro在SpringBoot中的使用 Shiro源码解析-登录篇 ...
- readonly与disable
Readonly只针对input(text / password)和textarea有效,而disabled对于所有的表单元素都有效,但是表单元素在使用了disabled后,当我们将表单以POST或G ...