gpt4 book ai didi

java - 从 Arraylist 中删除相似(冗余)的字符串

转载 作者:行者123 更新时间:2023-12-01 08:08:40 27 4
gpt4 key购买 nike

我试图从 ArrayList 中删除类似的字符串,但收到此错误:

 CurrentModificationException

这是我的方法,我传递原始 arrayList (旧)并获取一个没有冗余字符串的新列表。

ArrayList<String> removeRed(ArrayList<String> old) throws IOException
{

ArrayList<String> newList = new ArrayList<String>();


for (int i=0; i< old.size(); i++)
{
if(newList.size() < 1)
{
newList.add(old.get(0));

} else{

for(Iterator<String> iterator = newList.iterator(); iterator.hasNext();) {

while(iterator.hasNext())
{
if(!ChopMD((String) iterator.next()).equals(ChopMD(old.get(i))))
{
newList.add(old.get(i));
Log.e("new algo", "" + old.get(i) );
}
}

}
}
}}

请注意,我的 ChopMD() 返回一个特定的字符串,并且它工作正常。对于前几个字符串它工作得很好,这会引发异常。任何解决此问题的建议将不胜感激。谢谢。

最佳答案

如果您使用标准库没有问题(总是更好,为什么要重新发明轮子)尝试

List<String> uniques = new ArrayList<String>(new HashSet<String>(oldList));

HashSet 将仅包含唯一字符串,ArrayList 构造函数接受任何 Collection(包括 HashSet)建立一个列表。

从您的评论来看,您似乎正在尝试实现 Associative Array使用 ArrayList 具有唯一键。更好的方法是使用 Map像 HashMap 这样的实现将 ID 与其关联的字符串配对。

Map<Integer, String> map = new HashMap<>();
map.put(1, "This string corresponds to ID=1");
map.put(3, "Donald Ducks Nephews");
map.put(7, "Is a Prime");

然后获取与 ID 关联的值:

int key = someObject.getID();
String value = map.get(key);

所有 Map 实现都使用唯一键,因此您无需检查冗余 ID,如果您尝试添加新的(键,值)对,则如果映射包含以下内容,则与 ID 关联的值将被替换关键。

map.put(1, "New String");
String s = map.get(1); //s will no longer be "This string corresponds to ID=1"

如果您不希望出现这种行为,则可以选择对 Map 实现之一进行子类化,以忽略 .put(key, value) (如果映射包含 key,value 或将 .put(key,value) 委托(delegate)给其他类。

子类化:

public class UniqueValueHashMap<K,V> extends HashMap<K, V>{
@Override
public V put(K key, V value) {
if (containsKey(key))
return null;
return super.put(key, value);
}

委派

 public class SomeClass {
private Map<Integer, String> map = new HashMap<>();

// ...stuff this class does

public String put(int key, String value) {
if (map.containsKey(key))
return null;
return map.put(key, value);
}

// ...more stuff this class does
}

委托(delegate)是更好的方法,请注意如何更改映射实现(可能使用 TreeMap 而不是 HashMap),而无需引入新类(在该类中重写 .put(key,value))树形图。

关于java - 从 Arraylist 中删除相似(冗余)的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19337770/

27 4 0