扩展Comparable并获取通用数据结构类型的通用方法

时间:2013-12-29 21:04:37

标签: java comparable generic-programming

我有一个使用ArrayList实现“Set”的泛型类:

public class MySet<E> {
    ArrayList <E> setList;
    public MySet(){
        this.setList =  new ArrayList<E>();
    }
    public MySet(E[] inputArray){
        this();
        for(E element: inputArray)
            insert( element);
    }
    ...

现在我有另一个“Person.java”类,它具有“age”,“name”,“ID”的属性..

假设我创建一个Person []数组并从该数组中创建一个set类型的对象:

Person p1 = new Person("dani",15,12344);
Person p2 = new Person("michal",24,12354);
Person p3 = new Person("Leah",22,18888);
Person[] PeopleArr = {p1,p2,p3};
MySet<Person> People = new  MySet<Person>(PeopleArr);

现在我想在Person中创建一个泛型方法,它获取一个MySet类型并返回一个具有最小年龄的Person类型的对象。我如何迭代这样的事情?

我知道传递数组时不是问题:

public static <E extends Comparable<Person> > E min (E[] array) { 
    if (array == null || array.length ==0) return null;
    E min = array[0];
    for(int i=0;i<array.length;i++){
        if(array[i].compareTo((Person) min) <0) min = array[i];
    }
    return min;
}
public int compareTo(Object persona) {
    // TODO Auto-generated method stub
    Person person = (Person) persona;
    if (this.age == person.age)
        return 0;
    else if(this.age < person.age)
        return -1;
    return 1;
}

但我希望签名为:

public static <E extends Comparable<Person> > E min (MySet<Person> set) 

任何想法如何? (它不可能从MySet转换为ArrayList)迭代器似乎是唯一的方法,但不知道如何比较值

谢谢!!!

1 个答案:

答案 0 :(得分:2)

在MySet类中实现Iterable接口:

public class MySet<E> implements Iterable<E> {
    ...
    public Iterator<E> iterator() {
        return setList.iterator();
    }
}

现在您可以遍历MySet个项目:

for (Person person : set) {
}