【问题标题】:LinkedHashMap vs ArrayList with Bluetooth Scanning and ListViewLinkedHashMap 与 ArrayList 与蓝牙扫描和 ListView
【发布时间】:2015-06-22 18:17:00
【问题描述】:

当谈到什么被认为是更好的实现时,我有点困惑。

一方面,

LinkedHashMap 提供以下好处:

  1. 防止重复项(我需要能够防止扫描的蓝牙设备不重复进入列表。)
  2. 提供对项目的轻松访问以更新值。

还有以下陷阱:

  1. BaseAdapter 类自然不支持?对于自定义 ListView Adapter,我似乎无法使用 getItem 检索元素。

但是ArrayList

  1. 我可以通过索引轻松访问项目。
  2. 可以轻松替换项目以更新值。
  3. 使用自定义 BaseAdapter 类轻松工作。 但是……

  4. 我收到重复的项目。

  5. 除非我实现ArrayList 的对象参数的一些自定义comparators,否则我无法轻松地与ArrayList.contains 方法进行比较或检查。

有没有更简单的方法来实现以下目标:

  1. 通过 BLE 扫描,根据扫描结果构造自定义对象。 (已经完成)。
  2. 如果该自定义对象尚未包含在数组列表中,请将其粘贴到数组列表中。
  3. 如果已经在数组列表中,用新的对象替换之前的对象?

【问题讨论】:

  • 如何使用Set 或覆盖add()List 以仅在其不存在时添加?我也看不出您为什么要比较MapList。在我看来像苹果和橘子
  • @user489041 我需要订购,一套不保证订购吗?我比较这两者的原因是因为我不完全确定哪一个对我的实施的最后一点更好。我做了很多研究,但没有找到太多描述在这种特殊情况下该怎么做。
  • ArrayList.contains 在内部使用 Object.equals。所以你可以覆盖 equals 和 hash ,实现可比较并结合 contains 和 Collections.sort 你有你需要的一切。
  • @user489041,我的意思是。如果我采用 ArrayList 方法。为什么我的 ArrayList.contains(object) 总是返回 false,并复制这些扫描?这意味着我需要使用 LinkedHashMap?
  • @Tukajo LinkedHashSet 保证顺序 - 这是将元素添加到集合中的顺序。

标签: java listview arraylist linkedhashmap


【解决方案1】:

由于似乎没有人回答,我将提供我的方法。

1.重复条目

如果您喜欢使用 List ,那么正如我在 cmets 中所述, 我会让你的 Item 类覆盖 Object.equals()Object.hashCode()。 这些在ArrayList.contains() 内部使用。 这将给你没有重复的条目,只添加项目 list.contains(item) == false.

2。排序

要对 List 进行排序,有一个非常有用的类,叫做 Collections,它 简单地使用静态方法Collections.sort() 对列表进行排序。 要完成这项工作,您需要在您的 项目类并在此处应用您自己的排序规则。

树集

如果它不一定需要是一个列表,我建议 实现 Comparable 并使用 TreeSet,它天生就给你 的集合中没有重复的条目,直接通过添加进行排序。

LinkedHashSet

如果您只需要没有重复的条目并且应该遵循顺序 按插入顺序,用LinkedHashSet。

祝你好运,史蒂夫。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多