[英]Getting sorted keys and values in the Map
我希望這不再是重復的問題,
我做了兩個課程,“狗”和“ Ser”,
“狗”類使用比較器首先對價格進行排序。 (正確完成)
“ Ser”類應在地圖中添加排序后的價格表(作為值)+(未重復的國家/地區代碼,例如“鍵”。
在我的信息中,Map應該按升序對鍵進行顯式排序,但是不是這種情況,請參見輸出。
我現在的目標是在Class Ser中將國家/地區代碼與相應的價格值進行排序
class Dog implements Comparator<Dog>, Comparable<Dog> {
private int CountryCode;
private double Price;
private String Operator;
Dog() {
}
Dog(int c, double p, String o) {
CountryCode = c;
Price = p;
Operator = o;
}
public int getCountryCode() {
return CountryCode;
}
public double getPrice() {
return Price;
}
public String getOperator() {
return Operator;
}
// Overriding the compareTo method
public int compareTo(Dog d) {
double de = Price - d.getPrice();
if (de > 0.00001)
return 1;
if (de < 0.00001)
return -1;
return 0;
}
// Overriding the compare method to sort by price
public int compare(Dog d, Dog d1) {
double de = d.getPrice() - d1.getPrice();
if (de > 0.00001)
return 1;
if (de < 0.00001)
return -1;
return 0;
}
@Override
public String toString() {
return " " + Price + ":" + Operator + "";
}
}
public class Ser {
/**
* @param args
*/
public static void main(String[] args) {
// Takes a list o Dog objects
ArrayList<Dog> list1 = new ArrayList<Dog>();
Map<Integer, Dog> mp = new HashMap<Integer, Dog>();
list1.add(new Dog(1, 0.9, "A"));
list1.add(new Dog(268, 5.1, "A"));
list1.add(new Dog(46, 0.17, "A"));
list1.add(new Dog(4620, 0.0, "A"));
list1.add(new Dog(468, 0.15, "A"));
list1.add(new Dog(4631, 0.15, "A"));
list1.add(new Dog(4673, 0.9, "A"));
list1.add(new Dog(46732, 1.1, "A"));
list1.add(new Dog(1, 0.92, "B"));
list1.add(new Dog(44, 0.5, "B"));
list1.add(new Dog(46, 0.02, "B"));
list1.add(new Dog(467, 1.0, "B"));
list1.add(new Dog(48, 1.2, "B"));
list1.add(new Dog(1, 0.9, "c"));
list1.add(new Dog(44, 0.4, "c"));
list1.add(new Dog(46, 0.01, "c"));
list1.add(new Dog(467, 0.2, "c"));
// Sorts the array list using comparator
Collections.sort(list1, new Dog());
System.out.println("Sort the Dog class with respect to Price");
for (Dog a : list1)
// printing the sorted list of ages
System.out.println(a.getCountryCode() + " : " + a.getPrice()
+ " : " + a.getOperator());
// Add only those keys from sorted Price but if the key is added, don't
// repeat it
for (int i = 0; i < list1.size(); i++) {
if (!mp.containsKey(list1.get(i).getCountryCode()))
mp.put(list1.get(i).getCountryCode(), list1.get(i));
}
System.out.println("");
System.out.println(" Get Sorted List of Keys and values");
for (Map.Entry<Integer, Dog> e : mp.entrySet()) {
System.out.println(e.getKey() + "" + e.getValue());
}
}
}
輸出:根據價格對Dog類進行排序
4620 : 0.0 : A, 46 : 0.01 : c, 46 : 0.02 : B, 4631 : 0.15 : A, 468 : 0.15 : A, 46 : 0.17 : A, 467 : 0.2 : c, 44 : 0.4 : c, 44 : 0.5 : B, 1 : 0.9 : c, 4673 : 0.9 : A, 1 : 0.9 : A, 1 : 0.92 : B, 467 : 1.0 : B, 46732 : 1.1 : A, 48 : 1.2 : B, 268 : 5.1 : A
獲取鍵和相應值的排序列表
4673 0.9:A, 1 0.9:c, 46732 1.1:A, 48 1.2:B, 4631 0.15:A, 4620 0.0:A, 468 0.15:A, 46 0.01:c, 467 0.2:c, 268 5.1:A, 44 0.4:c
這是問題所在:
Map <Integer, Dog> mp= new HashMap <Integer, Dog> ();
HashMap不會將其元素按任何順序排序。 請嘗試使用TreeMap。 TreeMap具有一個使用Comparator的構造函數。
http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.