3

我有一个对象数组列表,其中包含有关对特定目标号码的呼叫的信息。我一直在尝试找出搜索此列表并返回出现次数最多的数字以及这些出现次数的最佳方法(从链接类中的另一个方法调用)。

例如:

我有这种方法,它通过调用地址簿中的随机数将调用添加到列表中

public void makeCall(Phonecall call)
    {
     call = new Phonecall();
     call.setDestination(anyNumber());
     call.setDuration(0 + (int)(Math.random() * (((balance/25) * 60) - 0) + 1));
     double cost = (call.getDuration()/60 * 25);
     balance = getBalance() - cost;
     updateCallHistory(call);
    }

然后我需要能够搜索它正在更新的arraylist callHistory 并找到被调用次数最多的目的地并返回该数字和计数。

然后我将为一个人拥有的每个“电话”调用这些值,并打印所有“电话”中计数最高的目的地以及它的计数。

我一直在环顾四周,找到了有关查找特定对象出现的信息,但无法弄清楚如何检查该对象中的特定字段而不是对象本身。

抱歉,如果这听起来令人费解,但我很困惑并且已经没有想法了,我的哈希映射还不是很强大,我无法调整我找到的示例来做我想做的事。

根据下面的评论,我有

public void mostCalled(String[] args) 
    {
        Map<Phonecall,Integer> map = new HashMap<Phonecall, Integer>();  
        for(int i=0;i<callHistory.size();i++){              
            Integer count = map.get(callHistory.get(i));         
            map.put(callHistory.get(i), count==null?1:count+1);  
        }  
        System.out.println(map);
    }

但我不知道如何使用 Phonecall 的目标字段而不是对象本身。

这样的事情会更合适吗:

public void mostCalled(String[] args) 
    {
        Map<String,Integer> map = new HashMap<String, Integer>();  
        for(Phonecall call : callHistory)
        {
            Integer count = map.get(call.destination);         
            map.put(call.destination, count==null?1:count+1);  
        }  
        System.out.println(map);
    }
4

2 回答 2

2

一种解决方案是声明 a Map<String, Integer> phoneCount,它将电话号码作为键,并将对该号码的呼叫次数作为值。

ArrayList然后,您将遍历PhoneCall对象并构建地图。具有最大价值的记录是您正在寻找的记录。

于 2013-01-19T19:14:33.463 回答
0

对于其他想要这样做的人,这就是我最终得到的。

public void mostCalled() 
    {
        Map<String,Integer> map = new HashMap<String, Integer>();  
        for(Phonecall call : callHistory)
        {
            Integer count = map.get(call.destination);         
            map.put(call.destination, count==null?1:count+1);  
        }  
        List<String> maxKeyList=new ArrayList<String>();
        Integer maxValue = Integer.MIN_VALUE; 
        for(Map.Entry<String,Integer> entry : map.entrySet()) 
        {
             if(entry.getValue() > maxValue) 
             {
                 maxValue = entry.getValue();
                 maxKeyList.add(entry.getKey());
             }
        }
        System.out.println("Phone numbers called the most : "+maxKeyList);
    }
于 2013-01-20T12:55:43.807 回答