这与仅删除重复项(您可以使用LinkedHashSet
执行)略有不同。如果我在Java中有一个这样的数组,我从byte[]
数组获得然后转换为String
数组:
[0,0,0,0,1,1,1,1,0,0,0,0,2,2,2,2,3,3,3,3,0,0,0,0]
有没有办法将其改为:
[0, 1, 0, 2, 3, 0]
我尝试使用HashSet
和LinkedHashSet
,但它没有按照我的意愿行事。即使它们在技术上是重复的,也会保留不同的0组。非常感谢!
答案 0 :(得分:2)
您可能希望遍历元素并将非连续复制元素复制到新集合中:
public class Tester {
public static void main(String[] args){
int[] values = {0,0,0,0,1,1,1,1,0,0,0,0,2,2,2,2,3,3,3,3,0,0,0,0};
List<Integer> output = new ArrayList<Integer>();
if(values.length > 0){
int previous = values[0];
output.add(previous);
for(int value : values){
if(previous != value){
output.add(value);
}
previous = value;
}
}
System.out.println(output); // [0, 1, 0, 2, 3, 0]
}
}
答案 1 :(得分:0)
扫描输入数组并仅发出每个序列的第一个值。这个伪C#算法应该指导你:
int[] a = ... // input array
int[] b = new int[a.Length]; // same size
int i, j;
if (a.Length == 0)
{
// return a zero-length array
}
i = 0;
j = 0;
while (i < a.Length)
{
b[j] = a[i];
while(i < a.Length && a[i] == b[j])
{
i++;
}
j++;
}
// return the sub-array of "b" from "0" to "j - 1"
这就是全部。