如何在自定义集合上使用 `Collections.min()`?
How to use `Collections.min()` on custom collection?
我写了一个名为 MySet<T>
的自定义集合,它本质上是对 HashSet
:
的包装
import java.util.Collections;
import java.util.HashSet;
public class MySet <T> {
private HashSet<T> set;
public MySet() {
this.set = new HashSet<>();
}
public MySet(T[] elements) {
this.set = new HashSet<>();
Collections.addAll(this.set, elements);
}
public HashSet<T> getSet() {
return this.set;
}
}
它包含与 union()
、intersect()
等集合相关的方法
我还写了一个名为 Person
的 class,它表示一个人的基本细节并实现了 Comparable
接口:
public class Person implements Comparable<Person> {
private int id;
private String name;
private int age;
public Person(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
private boolean equals(Person p) {
return this.age == p.age;
}
public int compareTo(Person p) {
return this.age - p.age;
}
}
我们根据 age
字段比较 Person
个对象。
我需要编写第三个class,它将只有接收MySet<Person>
对象的方法,并将确定最小值Person
.当然这可以通过使用两个循环来找到最小年龄来手动完成,但重点是对泛型使用 Java 方法,所以我虽然在 MySet<Person>
:[=32 上使用 Collections.min()
=]
public class MinimumClass<T> {
public T minElement(MySet<T> set) {
Collections.min(set);
}
}
无法编译并给出错误:no instance(s) of type variable(s) T exist so that MySet<T> conforms to Collection<? extends T>
据我所知,这意味着我必须在 MySet
中实现 Collection
接口。
有没有更简单的方法来编写确定最小人数的方法,利用 Person
实现 Comparable
而 MySet
是通用 class 的事实?
由于 HashSet
是 Collection
,您可以直接调用 Collections.min
。请注意,您应该将其限制为 Comparable
的 T
,以便使用 Collections.min
。
public class MinimumClass<T extends Comparable<T>> {
public T minElement(MySet<T> mySet) {
return Collections.min(mySet.getSet());
}
}
我写了一个名为 MySet<T>
的自定义集合,它本质上是对 HashSet
:
import java.util.Collections;
import java.util.HashSet;
public class MySet <T> {
private HashSet<T> set;
public MySet() {
this.set = new HashSet<>();
}
public MySet(T[] elements) {
this.set = new HashSet<>();
Collections.addAll(this.set, elements);
}
public HashSet<T> getSet() {
return this.set;
}
}
它包含与 union()
、intersect()
等集合相关的方法
我还写了一个名为 Person
的 class,它表示一个人的基本细节并实现了 Comparable
接口:
public class Person implements Comparable<Person> {
private int id;
private String name;
private int age;
public Person(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
private boolean equals(Person p) {
return this.age == p.age;
}
public int compareTo(Person p) {
return this.age - p.age;
}
}
我们根据 age
字段比较 Person
个对象。
我需要编写第三个class,它将只有接收MySet<Person>
对象的方法,并将确定最小值Person
.当然这可以通过使用两个循环来找到最小年龄来手动完成,但重点是对泛型使用 Java 方法,所以我虽然在 MySet<Person>
:[=32 上使用 Collections.min()
=]
public class MinimumClass<T> {
public T minElement(MySet<T> set) {
Collections.min(set);
}
}
无法编译并给出错误:no instance(s) of type variable(s) T exist so that MySet<T> conforms to Collection<? extends T>
据我所知,这意味着我必须在 MySet
中实现 Collection
接口。
有没有更简单的方法来编写确定最小人数的方法,利用 Person
实现 Comparable
而 MySet
是通用 class 的事实?
由于 HashSet
是 Collection
,您可以直接调用 Collections.min
。请注意,您应该将其限制为 Comparable
的 T
,以便使用 Collections.min
。
public class MinimumClass<T extends Comparable<T>> {
public T minElement(MySet<T> mySet) {
return Collections.min(mySet.getSet());
}
}