我有一个对象的arraylist,其中包含对特定目的地号码的呼叫信息。我一直试图找出搜索此列表的最佳方法,并返回出现次数最多的数字以及这些事件的数量(从链接类中的另一个方法调用)。
例如:
我有这种方法,通过调用地址簿中的随机数
来添加对列表的调用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并找到被调用次数最多的目的地并返回该数字和计数。
然后我会为一个人的每个“手机”调用这些值,并打印所有“手机”中最高计数的目的地以及它的数量。
我一直在环顾四周,找到了有关查找特定对象事件的信息,但却无法弄清楚如何检查该对象中的特定字段而不是对象本身。
很抱歉,如果这听起来有点令人费解,但是我很困惑并且已经用完了想法,我的哈希映射还不是很强大,而且我无法调整我发现的做我想做的事情。< / p>
基于以下评论,我有
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);
}
答案 0 :(得分:2)
一种解决方案是声明一个Map<String, Integer> phoneCount
,它将一个电话号码作为密钥,并将对该号码的呼叫数量作为值。
然后,您将遍历ArrayList
个PhoneCall
个对象并构建地图。具有最大价值的记录是您正在寻找的记录。
答案 1 :(得分: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);
}