【问题标题】:What would be the best way of converting Object ArrayList to Double List将 Object ArrayList 转换为 Double List 的最佳方法是什么
【发布时间】:2023-04-11 09:15:01
【问题描述】:

我已经开始学习 Java/Android,并且正在尝试收集蓝牙设备的 RSSI 值。我在同一个活动上有 2 个片段,我发现的每个设备都显示在列表视图上,并继续在包含我的对象类的 ArrayList 中收集数据。稍后当我想可视化设备的数据时,我需要将此对象数组列表转换为 ArrayList 以仅获取 RSSI 值并显示在第二个片段上。我的问题是这种转换使我的屏幕非常慢。有什么建议么?谢谢

这就是函数,我觉得它让它变慢了;

public static ArrayList<Double> extractDeviceRSSIOnly(ObjDevice device,
        ArrayList<ObjDevice> list)
{
    ArrayList<Double> selectedList=new ArrayList<Double>();
    if(device!=null&& list!=null) {
        if (list.size() > 0) {
            for(int i=0;i<list.size();i++)
            {
                if(list.get(i).get_macAddress().equals(device.get_macAddress())) {
                    selectedList.add(list.get(i).get_signalStrength());
                }
            }
        }
        return selectedList;
    }
}

【问题讨论】:

  • 我假设get_macAddress() 只是一个返回存储属性的简单函数,或者是否存在需要处理的实际逻辑?另外,你的名单有多长?除了这两件事之外,您的代码对我来说似乎还不错。
  • 它只是返回一个字符串属性,后面没有复杂的计算。其他的是,列表大小可以是 100 到 1000 的。

标签: java android object arraylist


【解决方案1】:

您的代码看起来不错。您可以通过避免两次调用get(i) 来提高效率。 enhanced for 将帮助您解决此问题,并为您提供更简洁的代码。

正如@Makoto 所建议的,您也可以避免list.size() &gt; 0 测试。空列表根本不会迭代。

if (device != null && list != null) {
    for (ObjDevice objDevice : list) {
        if (objDevice.get_macAddress().equals(device.get_macAddress())) {
            selectedList.add(objDevice.get_signalStrength());
        }
    }
}

【讨论】:

  • 您甚至可以摆脱对list 的大小检查。如果它是空的,它就不会迭代。
  • 这真的很重要吗? ArrayLists 不是常量时间访问吗?
  • 这很重要,因为它不会检查ith 元素的地址两次。
  • 当我删除 list.size()>0 并使用增强的 for 循环时,它变得更快了。
猜你喜欢
  • 2013-12-22
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多