0

问题1:我想将以下“Class Dog”的“特定”排序值添加到“Ser”类中使用的“Map”中。但我不知道如何实现这一点,

问题 2:如果成功填充,如何访问地图的填充值

以下是我绝望的尝试。

 class Dog implements Comparator<Dog>, Comparable<Dog>{

   private double Price;
 private String Operator;
  Dog(){
   }

  Dog( double p, String o){

   Price= p;
   Operator=o;
  }

  public double getPrice(){
  return Price;
  }
    public String getOperator(){
      return Operator;
   }


  // Overriding the compareTo method
  public int compareTo(Dog d){

   double data= Price - d.Price; 
   if ( data > 0.00001)return 1;
   if (data < 0.00001) return -1;
   return 0;
 }


   // Overriding the compare method to sort the age 
  public int compare(Dog d, Dog d1){

  double data= d.Price - d1.Price; 

   if ( data > 0.00001)return 1;
   if (data < 0.00001) return -1;
   return 0;

      }

}

 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, ArrayList<Dog> > map= new HashMap <Integer, ArrayList<Dog> > ();

  list1.add(new Dog(0.99 , "A"));
  list1.add(new Dog(0.91 , "C"));
  list1.add(new Dog(0.92 , "A"));
  list1.add(new Dog(0.97 , "B"));
  list1.add(new Dog( 0.93 , "C"));
  list1.add(new Dog(0.97 , "B"));
  list1.add(new Dog(0.92, "A"));
  list1.add(new Dog(0.97, "C"));
  list1.add(new Dog(0.92, "A"));
  // Sorts the array list using comparator

  Collections.sort(list1, new Dog());

  for(Dog a: list1)//printing the sorted list of ages
      System.out.println( a.getOperator()+"  : "+ a.getPrice());

  map.put(92,  list1);
  map.put(445, list1);
  map.put(966, list1);

 // Collections.sort(list1, new Dog());

 for (ArrayList<Dog> key: map.values() )     
         System.out.println(key);
         }

   }

输出:C:0.91,A:0.92,A:0.92,A:0.92,C:0.93,C:0.97,B:0.97,B:0.97,A:0.99

地图值的输出:[Dog@a981ca, Dog@8814e9, Dog@1503a3, Dog@1a1c887, Dog@743399, Dog@e7b241, Dog@167d940, Dog@e83912, Dog@1fae3c6] [Dog@a981ca, Dog@8814e9 , Dog@1503a3, Dog@1a1c887, Dog@743399, Dog@e7b241, Dog@167d940, Dog@e83912, Dog@1fae3c6] [Dog@a981ca, Dog@8814e9, Dog@1503a3, Dog@1a1c887, Dog@743399,狗@e7b241、狗@167d940、狗@e83912、狗@1fae3c6]

4

2 回答 2

2

您正在看到 的Object.toString表示Dog,您需要覆盖该方法:

@Override
public String toString() {
    return "Dog [Price=" + Price + ", Operator=" + Operator + "]";
}
于 2013-01-24T19:48:18.337 回答
1

问题1:

您创建了一个Map对象,该对象创建一个整数键并将其映射到Dogs列表。如果您希望将整数映射到 Dogs,您需要从以下开始:

Map <Integer, Dog> map= new HashMap <Integer, Dog> ();

现在,假设您的排序正在工作(我还没有调查过,我会让您调试以证明它是否有效)您需要使用集合的.get(int)方法您希望放置的列表List中获取狗进入地图。

您现在正在做的是将不同的整数映射到同一个列表 3 次。

map.put(92, list1.get(0));

0 指的是list1List 中的第一个 Dog 对象,选择你需要的任何东西来代替 0。

现在,对于需要打印它们的问题 2,您必须toString()像 Reimeus 所说的那样滚动一个函数,或者手动执行它。

for (Dog d : map.values()) {
  System.out.println("Dog " + d.getPrice() + " " + d.getOperator());
}

同样,您之前所做的是获取List已映射到映射中整数的对象。如果要保持这种格式,则必须遍历列表中的每个值:

for (List<Dog> ld : map.values()) {
  for (Dog d : ld) {
    System.out.println(...);
  }
}

我希望这对你有所帮助。

于 2013-01-24T19:57:01.020 回答