2012-12-16 10 views
1

我有一個機場的乘客列表,每個乘客都有一個目的地,我想知道更經常出現的目的地。如何知道從對象列表中更頻繁出現的屬性?

該列表是java中的ArrayList。

+2

答案是巴黎。不,認真,這是功課嗎? –

+0

它不是作業,它是一個項目,但它有關係嗎? –

+0

我試過使用計數器,但問題是,命運的數量是隨機的,所以它不會解決這個問題.. –

回答

0

嘗試下面的代碼只有一個for循環優化。

package com.rais; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import com.rais.vo.Passenger; 

/** 
* @author Rais.Alam 
* @date Dec 17, 2012 
*/ 
public class Client 
{ 

    public static void main(String[] args) 
    { 
     Client client = new Client(); 

    Passenger p1 = new Passenger("A", "USA"); 
    Passenger p2 = new Passenger("B", "USA"); 
    Passenger p3 = new Passenger("C", "UK"); 
    Passenger p4 = new Passenger("D", "UK"); 
    Passenger p5 = new Passenger("E", "UK"); 
    Passenger p6 = new Passenger("F", "UK"); 

    List<Passenger> passengers = new ArrayList<Passenger>(); 
    passengers.add(p1); 
    passengers.add(p2); 
    passengers.add(p3); 
    passengers.add(p4); 
    passengers.add(p5); 
    passengers.add(p6); 

    System.out.println(client.getMostVistedDestination(passengers)); 

} 

public String getMostVistedDestination(List<Passenger> passengers) 
{ 

    Map<String, Integer> tempMap = new HashMap<String, Integer>(); 

    int maxCount = 0; 
    String dest = ""; 

    for (Passenger passenger : passengers) 
    { 
     int count = 1; 
     if (tempMap.containsKey(passenger.getDestination())) 
     { 
      count = tempMap.get(passenger.getDestination()) + 1; 
      if (maxCount < count) 
      { 
       maxCount = count; 
       dest = passenger.getDestination(); 
      } 

     } 
     else if (maxCount == 0) 
     { 
      maxCount = count; 
      dest = passenger.getDestination(); 

     } 

     tempMap.put(passenger.getDestination(), count); 

    } 

    return dest; 

} 

} 

這裏是Passenger.java

package com.rais.vo; 

/** 
* @author Rais.Alam 
* @date Dec 17, 2012 
*/ 
public class Passenger 
{ 
    private String name; 
    private String destination; 

    /** 
    * @param name 
    * @param destination 
    */ 
    public Passenger(String name, String destination) 
    { 
     super(); 
     this.name = name; 
     this.destination = destination; 
    } 

    /** 
    * @return the name 
    */ 
    public String getName() 
    { 
     return name; 
    } 

    /** 
    * @param name 
    *   the name to set 
    */ 
    public void setName(String name) 
    { 
     this.name = name; 
    } 

    /** 
    * @return the destination 
    */ 
    public String getDestination() 
    { 
     return destination; 
    } 

    /** 
    * @param destination 
    *   the destination to set 
    */ 
    public void setDestination(String destination) 
    { 
     this.destination = destination; 
    } 

} 
1

沿(在僞代碼)東西線:

Map<Destination, Integer> map = new HashMap<>(); 
for(Passenger passenger : list) { 
    Destination dest = passenger.getDestination(); 
    int times = 0; 
    if(map.hasKey(dest)) { 
    times = map.get(dest); 
    } 
    map.put(dest, ++times); 
} 
Collections.sort(map.values()); 
相關問題