package com.collection.set;
import java.util.*;
class M
{
int age;
public M(int age)
{
this.age = age;
}
public String toString()
{
return "M[age:" + age + "]";
}
}
public class TreeSet_order_test
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet(new Comparator() //这里传进来的参数新建了一个Comparator对象
{
//根据M对象的age属性来决定大小
public int compare(Object o1, Object o2) //这里是属于Comparator类里面你的compare方法么?
{
M m1 = (M)o1;
M m2 = (M)o2;
int i = m1.age > m2.age ? -1
: m1.age < m2.age ? 1 : 0;
return i;
}
});
ts.add(new M(5));
ts.add(new M(-3));
ts.add(new M(9));
System.out.println(ts);
}
}
1.标注红色的地方的意义是什么,在新建TreeSet对象的时候 传递的参数又新建了一个Comparator对象,并且实现了compare方法。
2.传进来的参数 o1 o2 是怎么传进来的?传的是什么值
问题一:Comparator{}是一个Comparator接口的匿名实现类,前者需要实现后者的抽象方法,即compare。new Comparator(){},代表创建了一个该匿名实现类的实例。()是代表无参构造方法。这个实例传给treeset构造方法。
问题二:treeset通过构造方法得到了一个Comparator,由treeset内部调用该实实例的compare方法。这与treeset实现元素有序的策略有关,可能是在add的时候调用。