HashMapのArrayListの最初の値に基づいて最小の値を与えるように、PriorityQueueのコンパレータを作成しました。PriorityQueueコンパレータに渡されるHashMap/ArrayListの更新
私の問題は、残りのプログラムでは、ArrayListの最初の値を更新/変更する必要があるということです。優先度のキューが常に私に更新に基づいて適切な結果を与えることを確認するためにそれを行う方法がわからないのですか?あなたはPriorityQueue
でキーとして使用している値を変更した場合
おかげ
public class MyComparator implements Comparator<Integer>{
HashMap<Integer, ArrayList<Integer>> hm;
public MyComparator(HashMap<Integer, ArrayList<Integer>> hm){
this.hm = hm;
}
@Override
public int compare (Integer num, Integer num1){
ArrayList<Integer> list = hm.get(num);
int w = list.get(0);
ArrayList<Integer> list1 = hm.get(num1);
int w1 = list1.get(0);
if(w1 - w == 0){
return 0;
}
if(w1 - w <= 0){
return 1;
}
else{
return -1;
}
}
}
これは、compareメソッドを呼び出すときに適切な結果を得られます。また言及すると、それは 'if(w1 - w <0){return 1;}'であってはなりません。 – Thrasher
したがって、PriorityQueue.peek()を実行するたびにcompareメソッドが呼び出されます。 ?したがって、更新されたハッシュマップ/配列リストを使用していますか?そして、ええ、それを指摘してくれてありがとう... '='はそこにはいけません – Lsldioo