所以有一个数组列表:
ArrayList<Character> charOutput = new ArrayList<Character>();
他吃个字符,所以他最终会这样:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, *, *, *, *, *, *, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
但这在我们的特定应用中非常怪诞。我们想要削减他,最后,他看起来像这样:
[0,1,*,3,4]
那么,该怎么做?
答案 0 :(得分:3)
从ArrayList
构建Set
,然后将其转换回ArrayList
。
如果您不想使用集合,则可以简单地对给定的ArrayList
进行迭代,对于您看到的每个数字,将其添加到另一个ArrayList
只要它之前没有添加。
修改(不是代码的完整解决方案)
如果您只想删除连续的元素,请迭代ArrayList
,添加当前元素。现在只要下一个元素等于当前元素,继续..当你看到另一个元素与当前元素不同时,添加它...
答案 1 :(得分:2)
线性扫描数组,跟踪current item
。如果next item
与current item
匹配,请忽略它并继续前进。如果不匹配,请将new item
设为current item
并输出current item
。
这是代码
public static void main(String []args)
{
ArrayList<Character> charOutput = new ArrayList<Character>();
ArrayList<Character> charOutputTrimmed = new ArrayList<Character>();
charOutput.add('0');charOutput.add('0');charOutput.add('0');
charOutput.add('1');charOutput.add('1');charOutput.add('1');
charOutput.add('*');charOutput.add('*');charOutput.add('2');
charOutput.add('2');charOutput.add('0');
Character currentChar = charOutput.get(0);
charOutputTrimmed.add(currentChar);
for(int i=1;i<charOutput.size();i++)
{
if(currentChar != charOutput.get(i))
{
currentChar = charOutput.get(i);
charOutputTrimmed.add(currentChar);
}
}
for(int i=0;i<charOutputTrimmed.size();i++)
{
System.out.print(charOutputTrimmed.get(i) + "\t");
}
}
答案 2 :(得分:1)
使用Set获取唯一列表。这样做的好处是,它适用于任何用户定义的对象..
//Converting ArrayList to HashSet to remove duplicates
LinkedHashSet<Character> listToSet = new LinkedHashSet<Character>(duplicateList);
//Creating Arraylist without duplicate values
List<Character> listWithoutDuplicates = new ArrayList<Character>(listToSet);
答案 3 :(得分:0)
循环并保持不重复的字符
ArrayList<Character> charInput = new ArrayList<Character>();
ArrayList<Character> charOutput = new ArrayList<Character>();
char lastch = 255;
for (char ch : charInput) {
if (ch != lastch) {
charOutput.add(ch);
}
lastch = ch;
}
答案 4 :(得分:0)
将arraylist对象传递给LinkedHashSet,您将获得所需的输出。
Set<Character> s = new LinkedHashSet<Character>(charOutput);
谢谢和问候。