本文主要是介绍一下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. [Python]json 错误xx is not JSON serializable

    TypeError: Decimal('1457501') is not JSON serializable 在使用json的时候经常会遇到xxx  is not JSON serializable, ...

  2. JAVA输入随笔

    做题时经常遇到输入的问题,很麻烦 写一点点自己对于输入的随笔,以备后查 这里都以整数为例,其他类型的话换成相应方法就行了 1.知道一共多少行,每一行只有一个整数 这是比较简单的输入,可以用Scanne ...

  3. centos7 systemd 必知必会

    systemd 简介: systemd 是一个 Linux 系统基础组件的集合, 提供了一个系统和服务管理器, 运行为 PID 1 并负责启动其它程序 功能包括: 1.支持并行化任务 2.同时采用 s ...

  4. 集合之五:Set接口

    set接口的简单介绍 set接口在API中的说明是:一个不包含重复元素的 collection.更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 ...

  5. Navicat 连接腾讯云

    1.dos窗口下进入mysql,进行远程登录授权 (1)进行授权 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '1 ...

  6. CDQZ Day4

    NOIP 模拟题By liu_runda题目名称 数 论 题源程序文件名 number.cpp theory.cpp problem.cpp输入文件名 number.in theory.in prob ...

  7. Android调用 .Net Core WebApi 返回数据,用FastJSON解析一直报错。

    问题描述:.Net Core WebApi中用Newtonsoft.Json 把datatable转成json字符串,如:JsonConvert.SerializeObject(table,Forma ...

  8. 向指定url发送请求与获取响应

    string url = @"https://www.baidu.com"; //向指定服务器发起请求 HttpWebRequest request = (HttpWebReque ...

  9. KB4284826 远程桌面发生身份验证错误,要求的函数不受支持

    win -r  -> run  ->  gpedit.msc 链接:https://www.zhangfangzhou.cn/authentication-error.html远程桌面发生 ...

  10. fix the issue that disk space is not the size that aws ec2 have.

    在申请aws ec2时,按照向导,在选择存储的时候默认硬盘大小是 8 G,这时候可以根据自己的需要输入一个合适的数字,例如100.完成向导并启动ec2 instance 后登陆机器.使用命令: df ...