本文主要是介绍一下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 实现存自定义不可重复数据的更多相关文章

  1. 小马哥的 Java 项目实战营学习笔记(1)

    小马哥的 Java 项目实战营 小马哥的 Java 项目实战营 第二节:数据存储之 JDBC JDBC 核心 API 数据源 接口 - javax.sql.DataSource获取方式 1.普通对象初 ...

  2. Java实现数组去除重复数据的方法详解

    一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer ...

  3. JAVA数组去除重复数据

    一.用List集合实现   , , , , , , ,}; List<Integer> list = new ArrayList<Integer>(); ; i<str. ...

  4. Distinct删除重复数据时 自定义的方法比较【转】

    最近项目中在用Linq Distinct想要将重复的资料去除时,发现它跟Any之类的方法有点不太一样,不能很直觉的在呼叫时直接带入重复数据判断的处理逻辑,所以当我们要用某个成员属性做重复数据的判断时, ...

  5. Java里List取并集方法retainAll不能用来判断是否有重复数据!

    网上找的源码 public boolean retainAll(Collection<?> c){     boolean modified = false;     Iterator&l ...

  6. java 去除数组重复数据,并输出重复数据值

    /** * 去除重复数据 * @author Sunqinbo */ public class RemoveDuplicateData { public static void main(String ...

  7. [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 ...

  8. Android开发之适配器-ListView适配器的重复数据

    适配器是Android中的数据与View视图的桥梁,作用就是将数据通过适配器显示到对应的View视图上. 工作中,在用ListView做适配器数据时候,有些人肯定碰见过,如何优化效率,但是又出现重复数 ...

  9. 手把手教你如何用java8新特性将List中按指定属性排序,过滤重复数据

    在java中常常会遇到这样一个问题,在实际应用中,总会碰到对List排序并过滤重复的问题,如果List中放的只是简单的String类型过滤so easy,但是实际应用中并不会这么easy,往往List ...

随机推荐

  1. 不用split调转字符串

  2. 海思3519A 移植 Qt 5.5.1

    源码下载 网址:qt-everywhere-opensource-src-5.5.1.tar.gz 配置生成MakeFile 文件 解压源码包,在源码包路径下生成配置 MakeFile : ./con ...

  3. Qt for android运行时出错 Error: Target id 'android--1' is not valid

    [提问]windows7下Qt for android运行时出错 Error: Target id 'android--1' is not valid[复制链接] 上一主题下一主题   离线yijun ...

  4. 扩展中国剩余定理 exCRT 学习笔记

    前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...

  5. apt 命令大全

    #1. 搜索包 sudo apt-cache search package #2.获取包的相关信息,如说明,大小,版本. sudo apt-cache show package #3.了解包的依赖 s ...

  6. 赋值运算与深浅copy

    1.复制运算 l1 = [1,2,3,['a','b']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['a', 'b']] print(l2) # [1 ...

  7. django 中间件记录所有请求及请求执行时间

    class LoggingMiddleware(object): def process_request(self, request): request.start_time = time.time( ...

  8. PHP自然排序,非自然排序(未完成)

    还要研究一下,暂时先添加个链接 参考:PHP数组的“自然”排序

  9. java项目部署总结

    环境问题一定要搞定,今天下午因为我本机的mysql版本较高,部署一个java项目,mysql jar驱动包8.0的版本无法使用,浪费了好长时间找问题. 总结:遇到问题多方位思考,尽快解决掉,提高工作效 ...

  10. 快手、抖音、微视类短视频SDK接入教程,7步就能搞定

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由视频咖 发表于云+社区专栏 终端部分 按照如下三步操作,可以用 XCode 或者 Android Studio 编译和调试小视频 Ap ...