2010-01-07 4 views
1

현재 ID 목록이 있고 관련 점수가있는 곳에 문제가 있습니다.AddInOrder 최고의 구조? Java 숙제

ID : SCORE

1 : 12

2 : 15

3 : 2

4 : 99

I 원하는 예

이들을 반복하고 t를 더한다. 헴을 점수의 내림차순으로 정렬한다. 그래서 출력은

{4,2,1,3}

자바에서이 일을하는 가장 좋은 방법은 무엇입니까

같이 보일 것인가? 대기열?

감사 필립

답변

3

나는 이것이 Comparable 인터페이스를 배우기에 좋은 시간이라고 생각합니다. score으로 비교하는 클래스를 만들 수 있으며 toString()을 호출하면 id을 인쇄합니다. 앞에서 언급했듯이 Comparator 사용자 정의를 사용하는 것만으로도 충분하지만, Comparable으로 작업 한 적이 없다면 먼저 배우는 것이 좋습니다.여기

은 JavaDoc을 링크입니다 : http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html

당신이 알아야 할 두 개체가 O1 및 유형 Comparable<T>의 O2를 들어, o1.compareTo(o2) 반환 것입니다 :

  • -1 경우 주문에 O1 < O2 (T, O1 및 O2)
  • == 0 O1 O2 (다시 순서에 반드시 반대 경우 같음)의 형태로 정의
  • 1 O1> O2
  • 경우

이 정보는 사용자가 사용자 지정 클래스에 compareTo 함수를 쓰는 데 도움이됩니다.

클래스를 작성하고 나면 Java의 Collections 클래스는 을 Comparables으로 정렬하는 sort 메소드를 제공합니다. 쉬운! 세트가 여러 개의 동일한 요소를 금지하는 것이, http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html#sort%28java.util.List%29

2

Collection.sort(list, comparator)는 적절하지 않다?

그것은 "AddInOrder"아니다

가 (또는, Comparable 인터페이스를 구현할 수 클래스가 내부적으로 비교 논리를 제공하기 위해)

하지만 (comparator 클래스가 Comparator을 구현하고 비교 논리를 지정하는 것입니다) 귀하의 요구 사항을 충족시킵니다.

0

여기에는 여러 옵션이 있습니다. 마지막에 목록을 정렬하면 용도에 충분할 수 있습니다.

주문 불변식이 항상 유지되도록하려면 정렬 된 목록/트리가 있어야합니다. Java는 PriorityQueue 클래스를 제공합니다.

그러나 구현 세부 사항으로는 IDScore을 모두 캡슐화하는 클래스를 만들어 클래스를 특정 정렬 선택 항목과 비교할 수 있어야합니다.

0

정렬 된 집합 (예 : a tree set)에 항목을 하나씩 삽입하십시오. 클래스를 사용하여 id : score를 잡고 점수에 따라이 클래스의 두 인스턴스를 비교하는 비교자를 작성합니다.

EDIT : 이미 목록이있는 경우,이 경우 컬렉션을 정렬하는 것이 좋습니다.

+0

가주의 :

는 여기에 대한 링크입니다. 여기에 괜찮을 수도 있습니다. – notnoop