LinkedHashMap 与 ArrayList 与蓝牙扫描和 ListView

LinkedHashMap vs ArrayList with Bluetooth Scanning and ListView

关于什么是更好的实施,我有点困惑。

一只手,

LinkedHashMap 提供以下好处:

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

以及以下陷阱:

  1. BaseAdapter class 自然不支持?我似乎无法使用 getItem 为自定义 ListView Adapter.
  2. 检索元素

然而 ArrayList

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

  4. 我收到重复的项目。

  5. 我无法轻松地与 ArrayList.contains 方法进行比较或检查,除非我实现了 ArrayList's objects' 参数的一些自定义 comparators

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

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

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

1.重复条目

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

2。排序

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

树集

如果不一定需要List,我推荐 实施 Comparable 并使用 TreeSet,它自然而然地为您提供 一组没有重复条目,直接通过添加排序。

LinkedHashSet

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

祝你好运,史蒂夫。