Java ArrayList中项目的复制
我正在ArrayList中存储标识地址。问题是我重复存储它 以下是相关代码:Java ArrayList中项目的复制,java,android,Java,Android,我正在ArrayList中存储标识地址。问题是我重复存储它 以下是相关代码: public void storeIDs(final String emailAddress) { SharedPreferences.Editor editor = context.getSharedPreferences("storeIds", MODE_PRIVATE).edit(); IDAddresses.add(emailAddress); for(int i=0;i<IDA
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();
}
publicsvoidstoreid(最终字符串emailAddress){
SharedReferences.Editor=context.getSharedReferences(“storeId”,MODE_PRIVATE).edit();
IDAddresss.add(电子邮件地址);
对于(int i=0;i,根据您的描述,Set
是您应该选择的数据结构
- Set将不存储重复的(equals())元素,因此不必检查和添加
- 如果需要检查集合中是否存在元素,请使用基于
集的哈希表 (例如,HashSet
)contains()O(1)
将比ArrayList.contains()O(n)
正如@Kent所建议的那样,您应该为此使用a
不包含重复元素的集合。更正式地说,集合不包含e1和e2元素对,例如e1.equals(e2),最多包含一个空元素
另一种方法不推荐,但如果您要使用ArrayList
:
List<String> noDupes = Lists.newArrayList(Sets.newHashSet(IDAddresses));
只需使用ArrayList.contains(desiredElement)。例如,如果您正在从示例中查找conta1帐户,则可以使用以下内容:
if (IDAddresses.contains(i)) {
System.out.println("Account found");
} else {
System.out.println("Account not found");
}
我没有尝试此方法。必须使用此方法ArrayList.contains(desiredElement)来检查ArrayList中是否存在值
请浏览此链接为什么不使用集合
?在for循环中使用此if条件。
Set<String> IDAddresses = new HashSet<>();
IDAddresses.add(emailAddress);
List<String> noDupes = Lists.newArrayList(Sets.newHashSet(IDAddresses));
List<String> noDupes= IDAddresses.stream().distinct().collect(Collectors.toList());
if (IDAddresses.contains(i)) {
System.out.println("Account found");
} else {
System.out.println("Account not found");
}