如何调用和包含ArrayList <object> </object>

时间:2014-09-10 08:46:55

标签: java arraylist

我有一个这样的txt文件,我正在浏览它

wlan_AP : lcb-kasse |  ActiveUsers : 1
wlan_AP : WLAN-C7B702 |  ActiveUsers : 1
wlan_AP : Telekom |  ActiveUsers : 1
wlan_AP : Telekom |  ActiveUsers : 1
wlan_AP : FRITZ!Box |  ActiveUsers : 1
wlan_AP : Telekom |  ActiveUsers : 1
wlan_AP : Sperling2 |  ActiveUsers : 1
wlan_AP : lcb-kasse |  ActiveUsers : 2
wlan_AP : WLAN-C7B702 |  ActiveUsers : 2
wlan_AP : Telekom |  ActiveUsers : 2
wlan_AP : Telekom |  ActiveUsers : 2
wlan_AP : FRITZ!Box |  ActiveUsers : 2
wlan_AP : Telekom |  ActiveUsers : 2
wlan_AP : Sperling2 |  ActiveUsers : 2

所以我有WiFi-AccessPoint名称(wlan_AP)和目前活跃用户数量的测试结果。

您可能已经看到每个AccessPoint都有多个测量值(例如 lcb-kasse

我希望在程序结束时获得平均活跃用户数。

因此我创建了一个名为Averager的新类。每个

averagerList = new ArrayList<Averager>();

这个类有这个变量

private String wlanAp;  
ArrayList<Integer> measurements = new ArrayList<Integer>();

所以在主要方法中,我要浏览txt文件,将wlanAp作为字符串,然后查看是否存在wlanAp的对象

ArrayList<Averager> averagerList = new ArrayList<Averager>;

if (averagerList.contains(WlanAp))
{
    //it's already existing, just add a new measurement
   mittler.addMeasurement(m.getDb());                       
}
else
{
    averager = new Averager(mWlanAp);
    averagerList.add(averager);
    averager.addMeasurement(m.getActiveUsers());  
}

但我的问题 - 创建了14个对象而不是7个。为什么?而且我不知道如何检查是否已存在具有此String名称的元素

感谢您的帮助,我希望我能覆盖所有......如果不是,请询问

1 个答案:

答案 0 :(得分:2)

if (averagerList.contains(WlanAp))

此检查无效,因为WlanAp是String,而averagerList包含Averagers。根据他们的equals方法的实现,这两者并不等同。

您应该使用Map而不是List,地图设计用作从一个值到另一个值的查找,而列表是单个类型的集合。使用地图,您的代码将如下所示:

Averager av = map.get(WlanAp);
if ( av == null ) {
    av = new Averager();
    map.put( WlanAp, av );
}