2017-12-24 25 views
0

저는 축구 경기를 기록하고 리그 테이블을 표시하는 Java 프로젝트를 만들고 있습니다. 두 팀 사이에서 리그에 게임이 추가되면 팀의 포인트 수에 따라 팀 위치를 리그에 저장하는 방법이 필요합니다.값으로 HashMap 또는 TreeMap 정렬

이렇게하려면 HashMap < Integer, Team>을 사용합니다. 여기서 Integer는 팀의 포인트 수에 따라 리그에서 팀 위치를 저장합니다. 새로운 게임이 추가 될 때마다 가장 많은 수의 팀이 1 위 자리에 더 가깝게 정렬되도록이 목록을 주문하는 방법이 필요합니다. 세 팀

이있는 경우

는 예를 들어,

내가지도하고자 8 점, 5 점 팀 B, 4 포인트 팀 C와 함께 팀 A는

같은 주문하기

1 : A, 2 : B, 3 : C

내 질문은 다음과 같습니다

1)이 인스턴스에 HashMap 또는 TreeMap을 사용해야한다고 생각합니까?

2) 점수로 리그를 분류하는 코드를 어떻게 구현합니까?

+0

두 티타임이 같은 장소에 있으면 한 번 깨지 않을까요? – baao

+0

그렇습니다. 그렇지만 두 팀이 가지고있는 목표 차이에 대해서도 주문하고 싶습니다. 팀 A는 3 점, 팀 B는 3 점입니다. 팀 A의 목표 차이가 3이고 팀 B의 목표 차이가 5 인 경우 팀 B는 리그에서 더 큰 자리를 가져야합니다. –

+0

또한 목표 차이가 같은 경우 가장 많은 목표를 가진 사람이 이탈해야합니다. 그것이 동일하다면 그들이 어떤 명령을 사용 하느냐가 중요하지는 않은지 확실하지 않습니다. –

답변

2

List은 사용 사례에 더 적합합니다. 그것은 당신에게 상자에서 꺼내 번거 로움없이 정렬 색인을 제공합니다. 또한,이

내가의 Team 개체를 비교하게 배열 목록을 사용할 것 등, 같은 테이블에서 같은 값의 주문 표시에 더 적합이다, 그럼 내가 할 것 :

public class Team implements Comparable<Team> { 
    private int points; 
    private int goalDifference; 

    public Team(int points, int goalDifference) { 
     this.points = points; 
     this.goalDifference = goalDifference; 
    } 

    @Override 
    public int compareTo(Team other) { 
     int res = other.points - this.points; 
     return res != 0 ? res : (other.goalDifference - this.goalDifference); 
    } 

    //getters and setters 
} 

으로 당신이 Team 클래스를 비교하게하지 않으려면 비교기를 사용 (위의 조각을 계속) 수,

List<Team> teams = ... 
Collections.sort(teams); 

: 유사한 Team 클래스, 당신은 목록 기능을 사용할 수 있습니다

teams.sort((team1, team2) -> 
    (team2.getPoints() != team1.getPoints()) ? 
    (team2.getPoints() - team1.getPoints()) : 
    (team2.getGoalDifference() - team1.getGoalDifference()) 
    ); 

비교 또는 비교기에서 내림차순 논리를 구현했습니다. 대신 반전 비교기를 사용하도록 선택할 수 있습니다.

비교 필드의 수가 증가하면 Comparator를 구현하는 옵션이 점점 더 선호됩니다. 나는 그것이 더 읽기 쉽기 때문에 개인적으로 그것을 선호 할 것입니다.

+0

감사합니다.이 답변을 연장하는 방법을 알고 계십니까? 두 팀의 점수가 같으면 팀 - 골퍼 차이의 두 번째 변수로 주문해야합니다. –

+0

added goalDifference –

+0

훌륭하게 작동합니다. 고맙습니다. –

0

숫자가 1 인 경우 팀 개체에 순위를 저장하는 것보다지도를 사용하는 것이 좋습니다. 중복되는 순위가있는 두 팀이 없는지 확인하는 것이 약간 쉽습니다.

숫자 2의 경우 Comparator 인터페이스를 구현하는 클래스를 작성할 수 있습니다. compare 메서드를 구현하여 두 개체 (이 경우 Teams)를 비교하고 첫 번째 개체가 두 번째 개체보다 작거나 같거나 큰 경우 음수, 양수 또는 양수를 반환해야합니다. 이를 위해지도의 구현을 HashMap에서 TreeMap으로 변경해야합니다.