首页 > 解决方案 > 记分牌代码中要使用什么单链表或数组?

问题描述

我正在用java创建一个程序来存储前10个最高分。所以,我在其中使用 Array 。我有一个疑问,是否在程序中使用单链表或数组来避免代码的复杂性并使程序更高效。

    private int numEntries = 0;
private GameEntry[] board;
public Scoreboard(int capacity){
    board = new GameEntry[capacity];
}
public void add(GameEntry e){
    int newScore = e.getScore();
    if(numEntries<board.length||newScore>board[numEntries-1].getScore()){
        if(numEntries<board.length){
            numEntries++;
        }
        int j=numEntries-1;
        while(j>0&&board[j-1].getScore()<newScore){
            board[j]=board[j-1];
            j--;
        }
        board[j]=e;
    }
}

标签: javaarrayssingly-linked-list

解决方案


在这种情况下,无需过多考虑性能(除非它是巨大的数字),您应该编写尽可能清晰、可理解的代码。稍后您可能会对其进行调整,但首先要确保它在逻辑上正确,并且您确实需要改进性能。

此外,您不需要实现排序,使用现有的实用程序。

我会这样做:

List<GameEntry> arr = new ArrayList<>();
Comparator<GameEntry> cmp = Comparator.comparingInt(a -> a.getScore());

public void add(GameEntry e) {
  arr.add(e);
  Collections.sort(arr, cmp.reversed());
  while(arr.size() > capacity) {
    arr.remove(arr.size()-1);
  }
}


推荐阅读