“查询”列表

时间:2011-06-20 07:00:51

标签: java android collections

我有一个像这样的对象列表:

ArrayList<Phone> list = new ArrayList();
list.add(new Phone("+44 20 8765 4321", "mobile", "26"));
list.add(new Phone("+44 20 8765 4322", "home", "23"));
list.add(new Phone("+44 20 8765 4323", "mobile", "27"));
list.add(new Phone("+44 20 8765 4324", "work", "26"));
list.add(new Phone("+44 20 8765 4325", "home", "27"));
list.add(new Phone("+44 20 8765 4326", "home", "26"));

(23,26,27是联系人的身份)。如何“查询”此列表以获取具有多个电话号码{"26", "27"}的联系人的ID?

我需要一个不会将许多小对象存储到内存中的最佳解决方案(我的糟糕实现导致GC频繁运行,长时间冻结手机)。

1 个答案:

答案 0 :(得分:0)

你能用这个算法吗?

Set<String> dupIds = new HashSet<String>();
Set<String> set = new HashSet<String>();

for (Phone p: list) {
  if (set.contains(p.id)) {
     dupIds.add(p.id);
  } else {
     set.add(p.id);
  }
}

dupIds在流程结束时包含重复的ID,我在这里看不到太多的小对象。