集合TreeSet(自然排序与定制排序)

一、TreeSet的自然排序:

步骤:让元素自身具备比较性,

实现Compareable接口,覆盖其CompareTo方法

class Student
implements Comparable//第一:实现Compareable接口

{

private String
name;

private
int
age;

Student(String name,int age)

{

this.name = name;

this.age = age;

}

public
int
compareTo(Object obj) //第二:复写CompareTo方法

{

//return 0;

if(!(obj
instanceof Student))   //第三:判断对象是否是特定类的一个实例

throw
new
RuntimeException("不是学生对象");

Student s = (Student)obj;

System.out.println(this.name+"....compareto....."+s.name);

//第四:当前对象的年龄与插入对象的年龄进行比较,当前年龄大于插入对象的年龄时,返回1,

此时将插入二叉树的右边,当等于时,返回0,进行次要条件的比较,再次调用;当小于时,返回-1;

if(this.age>s.age)

return 1;

if(this.age==s.age)

{

return
this
.name.compareTo(s.name);

}

return -1;

/**/

}

public String getName()

{

return
name;

}

public
int
getAge()

{

return
age;

}

}

class TreeSetDemo

{

public
static void
main(String[] args)

{

TreeSet ts = new
TreeSet();

ts.add(new Student("lisi02",22));

ts.add(new Student("lisi007",20));

ts.add(new Student("lisi09",19));

ts.add(new Student("lisi08",19));

Iterator it = ts.iterator();

while(it.hasNext())

{

Student stu = (Student)it.next();

System.out.println(stu.getName()+"..."+stu.getAge());

}

}

}

二、TreeSet的定制排序

1、由来:当元素自身不具备比较性时,或者具备的比较性不是所需要的。

这时就要让集合自身具备比较性,在初始化时,就有了比较方式。

2、步骤:1.实现comparator接口

2.复写compare方法

3.在创建TreeSet集合对象时,提供一个一个Comparator对象,

import java.util.Comparator;

import java.util.Set;

import java.util.TreeSet;

class Student1{

private Integer
age;

public Student1(Integer age) {

super();

this.age = age;

}

public Integer getAge() {

return
age;

}

public
void
setAge(Integer age) {

this.age = age;

}

@Override

public String toString() {

return
age + "";

}

}

class MyComparator
implements
Comparator{  //第一步:实现Comparator接口

@Override

public
int
compare(Object o1, Object o2) {   //第二步:实现一个campare方法

判断对象是否是特定类的一个实例

if(o1 instanceof Student1 & o2
instanceof Student1){

Student1 s1 =(Student1)o1;

Student1 s2 =(Student1)o2;

if(s1.getAge() > s2.getAge()){

return -1;

}else
if
(s1.getAge() < s2.getAge()){

return 1;

}

}

return 0;

}

}

public
class
Demo15 {

public
static void
main(String[] args) {

Set<Student1> s= new TreeSet(new MyComparator());//第三步:创建TreeSet集合对象时,提供一个一个Comparator对象,

/**

* 要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象,

* 该对象里负责集合元素的排序逻辑;

*/

s.add(new Student1(140));

s.add(new Student1(15));

s.add(new Student1(11));

s.add(new Student1(63));

s.add(new Student1(96));

System.out.println(s);

}

}

时间: 2024-10-11 03:57:31

集合TreeSet(自然排序与定制排序)的相关文章

java TreeSet的排序之定制排序

TreeSet的自然排序是根据元素的大小进行升序排序的,若想自己定制排序,比如降序排序,就可以使用Comparator接口了: 该接口包含int compare(Object o1,Object o2)方法,用于比较两个对象的大小,比较结果和compareTo方法一致; 要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象,该对象里负责集合元素的排序逻辑; TreeSet(Comparator comparator) Eg: package july7; //

TreeSet ------自然排序与定制排序(比较器)

前言:TreeSet集合是Set集合的一个子实现类,它是基于TreeMap中的NavigableSet接口实现的,TreeSet集合是默认通过自然排序将集合中的元素进行排序 TreeSet有两种排序方式: 1)自然排序 2)比较器排序 1. 自然排序: 在TreeSet中默认要求里面的元素进行自然排序,强制要求里面的所有元素必须按照Comparable中的compareTo方法进行比较. 如果容器里面的对象不具备compareTo方法此时就会抛出异常报错,所以必须要让容器中的元素实现Compar

Java——(四)Collection之Set集合TreeSet类

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- TreeSet类 TreeSet是SortedSet接口的实现类,正如SortedSet名字所暗示的,TreeSet可以确保集合 元素处于排序状态.与HashSet集合相比,TreeSet还提供了如下几个额外的方法. 1)Comparator comparator(): 2)Object first(): 3)Object last(): 4)Object lower(Object o): 5

TreeSet之定制排序和自然排序

TreeSet的几大特点: 1.TreeSet中存储的类型必须是一致的,不能一下存int,一下又存string 2.TreeSet在遍历集合元素时,是有顺序的[从小到大](我的理解,如果存的字母,按字典序排列) 3.排序:当向TreeSet中添加自定义对象时,有2种排序方法,1:自然排序 2.定制排序 自然排序:要求自定义类实现java.lang.Comparable接口并重写compareTo(Object obj)方法.在此方法中,指明按照自定义类的哪个属性进行排序 一.自然排序示例: 1.

Java TreeSet的定制排序

注:只贴出实现类 package Test3; import java.util.Comparator;import java.util.TreeSet; public class Test { public static void main(String[] args) { Comparator com=new Comparator() {①创建一个Comparator接口的匿名内部类 @Override public int compare(Object o1, Object o2) {②重

TreeSet的定制排序

1 compare()与hashcode()与equals()三者保持一致 @Test //定制排序 public void testTreeSet2(){ //1.创建一个实现Comparator接口的匿名类对象 Comparator com = new Comparator(){ //向TreeSet中添加Student类的对象,在此compare方法中,指明是按照Customer的哪个属性排序的 public int compare(Object o1,Object o2){ if(o1

List的定制排序 包括使用lambda表达式来实现的方法

1.先实现Comparator的接口 重写compare方法 根据比较大小来返回数值: 比如:(Integer o1  -   Integer o2); return 1 表示o1>o2; return -1 表示o1<o2; return 0 表示 o1 = o2; 因此可以根据这个返回值来设定TreeSet里面的元素升序或者降序排列 ,下面演示的是实现接口并重写的方式来定制排序: @Override public int compare(Object o1, Object o2) { if

【TreeSet:请按照姓名的长度排序:比较器排序】

package com.yjf.esupplier.common.test; import java.util.Comparator; import java.util.TreeSet; /** * @author shusheng * @description 比较器排序 * @Email [email protected] * @date 2018/12/17 10:36 */ public class TreeSetDemo1 { public static void main(Strin

List&lt;Object&gt;集合按照Object的某个字段排序,解决取不到父类字段问题

<p>最近在做一个项目,里边有大量的排序需求,神烦!如果每个排序需求都做一个接口的话,那样工作量就太大了,所以就要有一个通用一些的排序工具类,来解决排序问题.</p><p>由于排序需求很大一部分都是List集合排序,所以就从网上找了一个List<Object>集合排序工具类来使用,这个工具类可以很灵活的传入需要排序的字段和需要的升序或者降序来排序.</p> public class SortListUtil { public static fin