限制ArrayList只有DISTINCT条目的方法更为昂贵?

时间:2012-10-03 10:51:30

标签: java android arraylist hashset

我有正在添加到arraylist的联系人,现在某些联系人在其他应用程序中很常见,因此重复的条目也会保存在其中。

我知道有两种方法可以解决这种情况,我不确定应该采用哪种方法?

首先:

String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
ArrayList<String> temp = new ArrayList<String>();
                temp.add(name);

                if (!contactList.contains(name)) {
                    contactList.add(name);}

第二

将其添加到hashset,因为它不允许重复条目,然后将其添加回arraylist-

     String name = getStrin(...);
        contactList.add(name);

// after the loop has completed adding all elements
    HashSet hs = new HashSet();
        hs.addAll(contactList);
        contactList.clear();
        contactList.addAll(hs);

2 个答案:

答案 0 :(得分:2)

您应该遵循第二种方式,因为它更好,并针对不同的值进行了优化。

答案 1 :(得分:1)

当您将其添加到HashSet时,HashSet将执行操作以检查条目是否存在,并且必须重新组织自身以适应新条目,尽管以更优化的方式。因此,我不认为通过第二种方法可以获得任何主要优势。另外,您正在方法2中执行addAll()和clear()操作,因此HashSet使用所获得的任何优化都可能会被这些优化。

我建议您先选择第一种方法,但是您应该测试这两种方法,并测量哪种方法更适合您的特定测试用例和应用程序要求。