Java 从ArrayList中删除重复项<;ArrayList<;字符串>&燃气轮机;对象

Java 从ArrayList中删除重复项<;ArrayList<;字符串>&燃气轮机;对象,java,Java,我有一个包含嵌套字符串的ArrayList,我想从中删除重复项。我知道如果我总是想删除重复项,我不应该使用ArrayList,但在某些情况下,重复项是有效的。从嵌套的ArrayList中删除重复项的最佳方法是什么 for (Iterator<ArrayList<String>> it = myListInList.iterator(); it.hasNext();) { ArrayList<String> current = it.next();

我有一个包含嵌套字符串的ArrayList,我想从中删除重复项。我知道如果我总是想删除重复项,我不应该使用ArrayList,但在某些情况下,重复项是有效的。从嵌套的ArrayList中删除重复项的最佳方法是什么

for (Iterator<ArrayList<String>> it = myListInList.iterator(); it.hasNext();)
{ 
   ArrayList<String> current = it.next();
   HashSet h = new HashSet(current);
   current.clear();
   current.addAll(h);
}
例如,我想执行一些Java转换:

[[duplicate], [duplicate], [duplicate], [unique1], [unique2]]
[[duplicate], [unique1], [unique2]]
至:

[[duplicate], [duplicate], [duplicate], [unique1], [unique2]]
[[duplicate], [unique1], [unique2]]

要从ArrayList中删除重复项,可以执行以下操作

yourList = new ArrayList<String>(new LinkedHashSet<String>(yourList));

您可以这样做:

for(Iterator it=myListInList.Iterator();it.hasNext();)
{ 
ArrayList current=it.next();
HashSet h=新的HashSet(当前);
current.clear();
当前添加所有(h);
}

使用集合可以说什么,除非您将其放入一个循环中,因为您有一个两段式数组:

import java.util.Arrays;

public class RunDuplicate
{
public RunDuplicate()
{
super();
}

public static void main(String[] args)
{
String[] duplicates = new String[] {"duplicate","duplicate","duplicate","unique1","unique2"};

Arrays.sort(duplicates);

int k = 0;

for (int i = 0; i < duplicates.length; i++)
{
if (i > 0 && duplicates[i].equals(duplicates[i -1]))
continue;

duplicates[k++] = duplicates[i];
}

String[] unique = new String[k];

System.arraycopy(duplicates, 0, unique, 0, k);

//test that unique contains no duplicate strings
for (int i = 0; i < unique.length; i++)
System.out.println(unique[i]);
}
}
Set Set=newlinkedhashset();
for(ArrayList:yourList){
set.addAll(列表);
}
ArrayList uniqueList=新的ArrayList(集合);
导入java.util.array;
公共类RunDuplicate
{
公共RunDuplicate()
{
超级();
}
公共静态void main(字符串[]args)
{
String[]duplicates=新字符串[]{“duplicate”、“duplicate”、“duplicate”、“unique1”、“unique2”};
数组。排序(重复);
int k=0;
对于(int i=0;i0&&duplicates[i].equals(duplicates[i-1]))
继续;
重复[k++]=重复[i];
}
字符串[]唯一=新字符串[k];
System.arraycopy(副本,0,唯一,0,k);
//测试unique不包含重复字符串
for(int i=0;i
新建哈希集(列表…)不是答案吗?然后再转换成列表。你说这是一个列表列表。是否要将
{{1,2},{1,3}
折叠为
{1,2},{3}
?还是应该单独对待每个内部列表?我也有点困惑。你是在寻找[[1,2,3]、[1,2]、[3]、[1,2]、[1,2]、[3]、还是[1,2,3]或者是什么意思?@Itfishie-[1,2,3]、[1,2]、[3]、[1,2]、[1,2]、[1,2]]变成[[1,2,3]。@Itfishie-抱歉,我误解了,我希望它变成[1,2,3],你的解决方案对我有效。-1使用迭代器(而不是每个循环使用一个)我认为使用迭代器模式是有用的。Hashset将导致排序被破坏,但在本例中它与此无关[我不能将其视为先决条件]。