ArrayList 中的项目重复

Posted

技术标签:

【中文标题】ArrayList 中的项目重复【英文标题】:Duplication of an item in an ArrayList 【发布时间】:2017-07-01 13:59:48 【问题描述】:

我将标识地址存储在我的 ArrayList 中。问题是我重复存储它。

以下是相关代码:

public void storeIDs(final String emailAddress) 
    SharedPreferences.Editor editor = context.getSharedPreferences("storeIds", MODE_PRIVATE).edit();
    IDAddresses.add(emailAddress);

    for(int i=0;i<IDAddresses.size();i++)
    
        editor.putString("value"+i,IDAddresses.get(i));
    
    editor.putInt("emailListSize",IDAddresses.size());
    editor.apply();

如何检查 emailAddress 是否已经存在于 ArrayList IDAddresses 中,如果存在,则不要存储它?

【问题讨论】:

为什么不使用Set 【参考方案1】:
//use this :
if( !IDAddresses.contains(emailAddress) )

    IDAddresses.add(emailAddress);



//instead of just this :
IDAddresses.add(emailAddress);

【讨论】:

【参考方案2】:
SharedPreferences sh = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);   
if(sh.Contains(IDAddresses.get(i))//do nothing
else editor.putString("value"+i,IDAddresses.get(i));

【讨论】:

【参考方案3】:

根据您的描述,Set 是您应该选择的数据结构。

Set 将存储重复的 (equals() ) 元素,因此您不必检查和添加 如果你需要检查一个元素是否存在于你的集合中,一个基于HashtableSet​​​​ HashSet) contains() O(1) 会比 ArrayList.contains() O(n)

【讨论】:

【参考方案4】:

正如@Kent 建议的那样,您应该为此使用Set

不包含重复元素的集合。更正式地说,集合不包含满足 e1.equals(e2) 的元素 e1 和 e2 对,并且最多包含一个空元素。

Set<String> IDAddresses = new HashSet<>();

然后:

IDAddresses.add(emailAddress);

另一种方法,不推荐,但如果你打算使用ArrayList 反正:

List<String> noDupes = Lists.newArrayList(Sets.newHashSet(IDAddresses));

基本上通过将ArrayList 转换为HashSet 来删除重复项。 使用番石榴

如果您使用的是 Java 8,您也可以使用 lamdas:

List<String> noDupes= IDAddresses.stream().distinct().collect(Collectors.toList());

【讨论】:

【参考方案5】:

只需使用 ArrayList.contains(desiredElement)。例如,如果您要查找示例中的 conta1 帐户,则可以使用以下内容:

 if (IDAddresses.contains(i)) 
    System.out.println("Account found");
 else 
    System.out.println("Account not found");

这个方法我没试过。你必须用这个方法ArrayList.contains(desiredElement)来检查arraylist中的值是否存在。

请通过此链接Check if a value exists in ArrayList

【讨论】:

在 for 循环中使用这个 if 条件。

以上是关于ArrayList 中的项目重复的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 ArrayList<String> 中的最后一项 [重复]

复制 ArrayList 的单个项目的问题[重复]

Java删除ArrayList中的重复对象[重复]

从 ArrayList 中删除项目时出错 [重复]

Java基础练习题10--[使用ArrayList获取10个随机数;String类型的ArrayList集合,去除ArrayList中的重复元素,模拟注册,登录存入集合]

Java - 删除 ArrayList 中的重复项