• 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 + "]";
    	}	
    	
    }
    

      

  • 相关阅读:
    mysql8下载安装及配置
    jdk11下载安装及环境变量配置
    展示所有商品案例
    事务(转账实例)
    Part2.7 ESLint
    Part2.6 Webpack
    Part2.5 模块化开发
    Part2.4 gulp 实践
    Part2.3 Grunt
    Part2.2 plop 使用
  • 原文地址:https://www.cnblogs.com/nn369/p/7474125.html
Copyright © 2020-2023  润新知