Java函数的参数是新建一个对象,这个怎么理解

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的时候调用。

猜你喜欢

转载自blog.csdn.net/qq_39674417/article/details/113745530
今日推荐