2017-12-23 47 views
1

나는 본질적 HashSet에 대한 래퍼의 사용자 지정 컬렉션 MySet<T>라고 썼다커스텀 컬렉션에서`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; 
    } 
} 

그것은 union() 같은 세트의 관련이있는 방법을 포함 intersect()

또한 Person라는 클래스를 썼다 어떤 사람에 대한 기본적인 세부 사항을 표현하고 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 개체를 비교합니다.

나는 단지 MySet<Person> 객체를 받게되며 최소 Person을 결정하는 방법이있을 것이다 세 번째 클래스를 작성해야 . 물론 이것은 최소 연령을 찾기 위해 두 개의 루프를 사용하여 수동으로 수행 할 수 있지만 요점은 제네릭에 대한 자바 방법을 사용하는 것입니다, 그래서 비록 Collections.min()MySet<Person>에 사용 :

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> 내가 이해하는 한 MySetCollection 인터페이스를 구현해야한다는 것을 의미합니다.

PersonComparableMySet을 구현하는 최소 인물을 결정하는 방법을 쓰는 쉬운 방법은 제네릭 클래스입니까?

+0

왜'MySet'이'Collection' 인터페이스를 암시하는 것을 피합니까? – Mureinik

+1

@Mureinik 왜냐하면 하나만 사용하기 위해 10 가지 방법을 구현해야하기 때문입니다. – Yos

+0

당신은 단지 그것들을 모두'Set'에 위임 할 수 있습니다 ... 상관없이 - MySet에서 요소를 되 찾을 수있는 방법이 있습니까? 공유 한 스 니펫에 아무 것도 표시되지 않습니다. – Mureinik

답변

2

HashSetCollection이므로 Collections.min을 방금 호출 할 수 있습니다. 을 사용하려면 ComparableT으로 제한해야합니다.

public class MinimumClass<T extends Comparable<T>> { 
    public T minElement(MySet<T> mySet) { 
     return Collections.min(mySet.getSet()); 
    } 
} 
+0

이 코드는 컴파일되지 않고 OP와 같은 오류를 반환합니다. – Yos

+0

@STaefi 이것은 return 문을 추가 한 후에도 컴파일되지 않습니다. – Yos

+0

@Yos : 저는 방금 코드에서 오류를 언급했습니다. – STaefi