Java 如何在自定义集合上使用`Collections.min()`?
我编写了一个名为Java 如何在自定义集合上使用`Collections.min()`?,java,generics,collections,comparison,min,Java,Generics,Collections,Comparison,Min,我编写了一个名为MySet的自定义集合,它本质上是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[
MySet
的自定义集合,它本质上是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;
}
}
我们根据age
字段比较Person
对象
我需要编写第三个类,该类只包含将接收MySet
对象的方法,并将确定最小的人
。当然,这可以通过使用两个循环来手动完成,以找到最小年龄,但关键是对泛型使用Java方法,因此我建议在MySet
上使用Collections.min()
:
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;
}
}
公共类最小类{
公共T minElement(MySet set){
集合。最小值(集合);
}
}
它没有编译并给出错误:
不存在类型变量的实例,因此MySet符合Collection,因为HashSet
是一个集合
,您可以在它上面调用Collections.min
。请注意,为了使用Collections.min
,您应该将其限制为T
s中的compariable
public class MinimumClass<T extends Comparable<T>> {
public T minElement(MySet<T> mySet) {
return Collections.min(mySet.getSet());
}
}
公共类最小类{
公共T minElement(MySet MySet){
返回Collections.min(mySet.getSet());
}
}
为什么要避免使用MySet
实现集合
接口?@Mureinik,因为我必须实现10个方法才能只使用一个。你可以将它们全部委托给底层的集合
。。。不管怎样-是否有任何方法可以从MySet
获取元素?您共享的代码段没有显示任何内容。@Mureinik是的,我有getSet()
方法,我编辑了OP以添加它。此代码未编译,并返回与OP中相同的错误。@statefi添加return
statement@Yos:我知道,我刚才提到了代码中的错误。@Yos当时被抓住了,我道歉。“编辑并修复了。@斯塔菲被卷入了这一刻,我道歉。编辑和固定。
public class MinimumClass<T extends Comparable<T>> {
public T minElement(MySet<T> mySet) {
return Collections.min(mySet.getSet());
}
}