计分板代码中要使用什么单链表或数组?
What is to be used Singly linked list or Array in the scoreboard code?
我正在 java 中创建一个程序来存储前 10 个最高分。所以,我在其中使用数组。我有一个疑问,在程序中到底是用单链表还是数组来避免代码的复杂,提高程序的效率
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;
}
}
在这种情况下无需过多考虑性能(除非是巨大的数字),您应该编写尽可能清晰易懂的代码。稍后你可能会调整它,但首先要确保它在逻辑上是正确的,并且你确实需要性能改进。
此外,您不需要实施排序,使用现有的实用程序。
我会这样做:
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);
}
}
我正在 java 中创建一个程序来存储前 10 个最高分。所以,我在其中使用数组。我有一个疑问,在程序中到底是用单链表还是数组来避免代码的复杂,提高程序的效率
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;
}
}
在这种情况下无需过多考虑性能(除非是巨大的数字),您应该编写尽可能清晰易懂的代码。稍后你可能会调整它,但首先要确保它在逻辑上是正确的,并且你确实需要性能改进。
此外,您不需要实施排序,使用现有的实用程序。
我会这样做:
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);
}
}