일부 요소의 역사적인 뷰를 개발 중입니다. 각 요소에는 시작 날짜와 종료 날짜가 있습니다. 마침표가 겹칠 수 없으므로 각 시작 날짜는 이전 날짜와 같거나 그 이후 여야합니다. 종료 날짜가 널 (NULL)이면 요소는 시작 날짜부터 종료 날짜를 알 수있을 때까지 활성화됩니다.TreeSet의 Look-Up 동등 요소
public class Entry implements Comparable<Entry>
{
Integer start;
Integer end;
public Entry(Integer s, Integer e)
{
start = s;
end = e;
}
@Override
public boolean equals(Object obj)
{
if (obj instanceof Entry)
{
return compareTo((Entry) obj) == 0;
}
return false;
}
@Override
public int compareTo(Entry o)
{
if (o.end != null // other ends before or when this starts
&& (o.end.equals(start) || o.end < start))
{
return 1;
}
if (end != null // other starts after or when this ends
&& (o.start.equals(end) || o.start > end))
{
return -1;
}
return 0;
}
}
내가 요소를 정렬 할 TreeSet의를 사용
는 테스트를 위해 나는이 클래스를 만들었습니다. 이제 현재 활성 또는 첫 번째 요소를 가져올 수 없다는 문제가 있습니다.
JavaDoc을 보면 트릭해야 천장 방법 :
는 그러한 요소가 존재하지 않는 경우는이 요소 속에서 최소보다 크거나 지정된 요소와 동일한, 또는 null 설정 돌려줍니다.
그러나 이것은 작동하지 않습니다.
ts.ceiling(new Entry(5, null));
내가 기대 그 결과로 항목입니다 :
TreeSet<Entry> ts = new TreeSet<Entry>();
ts.add(new Entry(1, 3));
ts.add(new Entry(3, 5));
ts.add(new Entry(5, 7));
ts.add(new Entry(7, 9));
ts.add(new Entry(9, 11));
ts.add(new Entry(11, 13));
ts.add(new Entry(13, 15));
그런 다음 나는 다음과 같은 코드를 사용하여 천장을 얻을 : 테스트 케이스에
나는 항목의 무리와 함께 TreeSet의를 만들 5를 시작하고 7을 끝내십시오 ('동일'항목). 그러나 결과는 시작이 7이고 끝이 9 인 항목 (큰 항목)입니다. 두 결과 모두 주어진 요소와 같거나 그보다 큰 것으로 규정됩니다. 그러나 JavaDoc이 최소 요소를 반환한다고 언급 한 이후로 나는 5-7 Entry를 기대합니다.
그렇다면 내가 대신에 문자열 세트를 사용하면 어떻게 될까요? TreeSet t = new TreeSet (); t.add ("a"); t.add ("b"); t.add ("c");','t.ceiling ("b");'spits out ""b "'? 당신은 "c"가되어야한다고 말하고 있습니다. –
siebz0r
죄송합니다 조금 명확하지 않거나 틀렸을 수도 있지만 천장은 *보다 크거나 같음을 반환합니다. TreeSet은 실제로 Tree (배후) 구조입니다 (!), 그 트리의 노드는 두 개의 동일한 노드에 해당합니다. 구현에 따라 달라집니다. –
목록을 사용했다면 분명히 (업데이트 된 답변도 약간 있습니다) 대신'get()'를 사용했다면리스트의 첫 번째 것을 찾는다. –