TreeSet排序

TreeSet的排序能够通过两种方法来实现:

1.通过TreeSet(Comparator<?
super E> comparator) 构造方法指定TreeSet的比較器进行排序。

2.使用TreeSet()构造方法。并对须要加入到set集合中的元素实现Comparable接口进行排序;

方法一样例:

person类:

public class Person {
	private String name;
	private int age;
	private String date;

	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;
	}
	public String getDate() {
		return date;
	}
	public void setDate(String date) {
		this.date = date;
	}
	public Person(String name) {
		this.name=name;
	}
	public Person() {
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", date=" + date + "]";
	}
	public Person(String name, int age, String date) {
		super();
		this.name = name;
		this.age = age;
		this.date = date;
	}

}

自己实现比較器:

import java.util.Comparator;
public class MyComparator implements Comparator<Person>{
	@Override
	public int compare(Person p1, Person p2) {
		if(p1.getAge()>p2.getAge()){
			return 1;
		}else if(p1.getAge()==p2.getAge()){
			return 0;
		}else{
			return -1;
		}
	}

}

測试数据:

@Test
	public void treeSet(){//全部元素总是依据指定排序规则保持有序状态。

Set<Person> set = new TreeSet<Person>(new MyComparator());
		set.add(new Person("aaa", 67, "254"));
		set.add(new Person("bbb", 16, "254"));
		set.add(new Person("ccc", 1, "254"));
		set.add(new Person("ddd", 675, "254"));
		System.out.println(set);
	}

结果:

方法二样例:

person类,须要实现Comparable接口,并重写compareTo()方法。compareTo方法中定义排序的方式

public class Person2 implements Comparable {
	private String name;
	private int age;
	private String date;

	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;
	}

	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}

	public Person2(String name) {
		this.name = name;
	}

	public Person2() {
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", date=" + date + "]";
	}

	public Person2(String name, int age, String date) {
		super();
		this.name = name;
		this.age = age;
		this.date = date;
	}

	@Override
	public int compareTo(Object obj) {
		if (obj instanceof Person2) {//instanceof推断内存中实际对象obj是不是Person2类型
			Person2 p = (Person2) obj;
			if (this.age > p.getAge()) {
				return 1;
			} else if (this.age == p.getAge()) {
				return 0;
			} else {
				return -1;
			}
		}
		return 0;
	}

}

測试数据:

@Test
	public void treeSet2(){
		Set<Person2> set = new TreeSet<Person2>();
		set.add(new Person2("aaa", 67, "254"));
		set.add(new Person2("bbb", 16, "254"));
		set.add(new Person2("ccc", 1, "254"));
		set.add(new Person2("ddd", 675, "254"));
		System.out.println(set);
	}

測试结果:

[Person [name=ccc, age=10, date=254], Person [name=eee, age=12, date=254], Person [name=bbb, age=16, date=254], Person [name=aaa, age=67,
date=254], Person [name=ddd, age=675, date=254]]

时间: 2024-10-10 07:28:04

TreeSet排序的相关文章

TreeSet排序,存储自己定义对象,自己定义比較器演示样例

Set:无序.不能够反复元素. |--HashSet:数据结构是哈希表.线程是非同步的. 保证元素唯一性的原理:推断元素的hashCode值是否同样. 假设同样,还会继续推断元素的equals方法.是否为true. |--TreeSet:能够对Set集合中的元素进行排序. 底层数据结构是二叉树. 保证元素唯一性的根据:compareTo方法return 0. TreeSet排序的第一种方式:让元素自身具备比較性. 元素须要实现Comparable接口,覆盖compareTo方法. 也种方式也成为

TreeSet排序树

TreeSet中的对象是按照大小进行排序的,因此,TreeSet中的对象必须是可以比较大小的. ①可以通过TreeSet中的对象继承Comparable接口 ②通过外部裁判来对对象进行大小裁定 根据自定义比较器的规则,当比较的对象相同,则认为是内容上或逻辑上相同的元素,就不会把他们加进来. 方式1:实现Comparable接口 package cn.cqu.huang; import java.util.Set; import java.util.TreeSet; class Student i

TreeSet排序,存储自定义对象,自定义比较器示例

Set:无序,不可以重复元素. |--HashSet:数据结构是哈希表.线程是非同步的. 保证元素唯一性的原理:判断元素的hashCode值是否相同. 如果相同,还会继续判断元素的equals方法,是否为true. |--TreeSet:可以对Set集合中的元素进行排序. 底层数据结构是二叉树. 保证元素唯一性的依据:compareTo方法return 0. TreeSet排序的第一种方式:让元素自身具备比较性. 元素需要实现Comparable接口,覆盖compareTo方法. 也种方式也成为

【java】用HashMap计数,用TreeSet排序

1 package com.tn.hashMap; 2 3 import java.util.HashMap; 4 import java.util.TreeSet; 5 6 public class HashMapDemo { 7 public static void main(String[] args){ 8 9 String str="eeeeaccbbddddffffff"; 10 HashMap<String,Integer> hashMap=new HashM

TreeSet排序相关总结

java的集合这一块在工作中用得还比较多,有些东西老是忘,因此在此记录下来. TreeSet原理 1.特点 TreeSet是用来排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列 2.使用方式 a.自然顺序(Comparable) TreeSet类的add()方法中会把存入的对象提升为Comparable类型 调用对象的compareTo()方法和集合中的对象比较(当前存入的是谁,谁就会调用compareTo方法) 根据compareTo()方法返回的结果进行存储 b.比较器顺序(C

TreeSet和Comparator 对TreeSet排序

使用TreeSet和Comparator,编写TreeSetTestInner类,要求对TreeSet中的元素"HashSet"."ArrayList"."TreeMap"."HashMap"."TreeSet"."LinkedList"进行升序和倒序排列,并使用匿名内部类和静态内部类分别实现. 方法一: 静态内部类 import java.util.*; public class Tr

TreeSet 排序

1 class Person1 implements Comparable <Person1>{ 2 private Float height; 3 private String name; 4 5 Person1(float height) 6 { 7 this.height=height; 8 } 9 10 public Float getHeight() { 11 return height; 12 } 13 14 public void setHeight(float height)

排序及重复元素去重的说明,TreeSet,HashSet

先看下面一段代码: package 类集; import java.util.Set; import java.util.TreeSet; class Person{ private String name ; private int age ; public Person(String name,int age){ this.name = name ; this.age = age ; } public String gtoString(){ return "姓名:" + this.

Java TreeSet集合排序 &amp;&amp; 定义一个类实现Comparator接口,覆盖compare方法 &amp;&amp; 按照字符串长度排序

package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.RuntimeErrorException; /* 可以对set集合中的元素进行排序,其底层的数据结构是二叉树, 保证元素唯一性的依据是compareTo和return 0; TreeSet排序的第一种方式 让元素自身具备比较性 元素需要实现Comparable接口,覆盖compareTo方法 这种方式