嘗試按降序對列表進行排序,最長的時間在先。這是我的方法,我從這裏使用了幾頁來使其正確,但是我的代碼中的某些內容是錯誤的,並且返回了不正確的列表。基於整數的排序哈希映射
public static ArrayList<String> winnerIs(List<HP> hp){
//System.out.println("1");
int size = hp.size();
//System.out.println(size);
ArrayList<HP> listofWinner = new ArrayList<HP>();
Map<String, Integer> map = new HashMap<String, Integer>();
for(int i = 0; i < size; i++){
listofWinner.add(hp.get(i));
map.put(hp.get(i).getName(), hp.get(i).TD1());
//System.out.println(hp.get(i).getName()+" "+hp.get(i).TD1());
}
//sort based on time
ArrayList<String> keys = new ArrayList<String>(map.keySet());
//System.out.println("---------------");
/*for(int i = 0; i < keys.size(); i++){
//wn.add(keys.get(i));
System.out.println("here "+keys.get(i));
}*/
//System.out.println("---------------");
ArrayList<String> wn = new ArrayList<String>();
//System.out.println("---------------");
for(int i = keys.size()-1; i >= 0; i--){
wn.add(keys.get(i));
}
return wn;
}
這裏是什麼reurns:
[team2, team1, team4, team3]
,但它應該是這樣的:
[team4, team3, team2, team1]
如果時間等於沒關係,我們只是需要更好的時間,我不確定哪部分代碼是錯誤的。
甚至當我使用這個
ArrayList<Integer> s = new ArrayList<Integer>(map.values());
Collections.sort(keys);
//System.out.println("---------------");
for(int i = 0; i < s.size(); i++){
//wn.add(keys.get(i));
System.out.println("here "+s.get(i));
}
結果仍然沒有在這裏糾正是它返回:
here 2
here 9
here 0
here 0
所以我曾經在stackoverflouw一個頁面中,我發現這個解決方案:
public static ArrayList<String> winnerIs(List<HumanPlayer> hp){
//System.out.println("1");
int size = hp.size();
//System.out.println(size);
ArrayList<HumanPlayer> listofWinner = new ArrayList<HumanPlayer>();
Map<String, Integer> map = new HashMap<String, Integer>();
for(int i = 0; i < size; i++){
listofWinner.add(hp.get(i));
map.put(hp.get(i).getName(), hp.get(i).getTimeDriver1());
//System.out.println(hp.get(i).getName()+" "+hp.get(i).getTimeDriver1());
}
map.entrySet().stream()
.sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
.limit(1000)
.forEach(System.out::println);
return null;
}
這會返回正確的列表,但我不確定這是什麼:.limit(1000)
以及我怎麼能等於這個列表,所以我可以返回它。
你實際上在做重新排序,而不是排序。 'HashMap'是一個無序的地圖。改爲使用'LinkedHashMap',或者用'Collections.sort'排序結果列表。 –
您將名稱作爲鍵並對稍後獲得的鍵集()進行排序。我不知道TD1()是什麼,但是如果是你想要排序的時間,那麼你應該在Map中排序值而不是鍵。 – Amit
@Amit我應該怎麼做,如果它是valueSet()而不是keySet()? –