java - 记分牌代码中要使用什么单链表或数组?
问题描述
我正在用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;
}
}
解决方案
在这种情况下,无需过多考虑性能(除非它是巨大的数字),您应该编写尽可能清晰、可理解的代码。稍后您可能会对其进行调整,但首先要确保它在逻辑上正确,并且您确实需要改进性能。
此外,您不需要实现排序,使用现有的实用程序。
我会这样做:
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);
}
}
推荐阅读
- javascript - 调用 Array.prototype.slice.apply(arguments) 时结果不同
- android - 无法使用 Firebase UI 在 Recyclerview 之间放置广告以获取 Firestore 数据
- oauth-2.0 - 无法从 azure v2 令牌端点获取 given_name 和 family_name
- mysql - 使用 docker-compose 同时运行 2 个 docker mysql 容器
- tink - 我可以使用 Google Tink 解密 Keyczar 加密的数据吗?
- c# - c# data annotations 验证模型,脱离上下文绑定
- python - 安装 wheel 和 httplib2 库后,我无法在代码中导入 httplib2
- javascript - 检查类不返回真
- html - 如何防止在输入字段中使用某些字符
- c++ - CGAL:无法打开 .xyz 文件