Java 如何更改数组,使重复元素只显示一次?

Java 如何更改数组,使重复元素只显示一次?,java,arrays,Java,Arrays,这与仅删除重复项略有不同(您可以使用LinkedHashSet)。如果我在Java中有这样一个数组,我从字节[]数组中得到,然后转换成字符串数组: [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的不同集合也会保持不变。非常感谢 扫描输入数组并仅发出每个序列的第一个值。这个伪C算法

这与仅删除重复项略有不同(您可以使用
LinkedHashSet
)。如果我在Java中有这样一个数组,我从
字节[]
数组中得到,然后转换成
字符串
数组:

[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的不同集合也会保持不变。非常感谢

扫描输入数组并仅发出每个序列的第一个值。这个伪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"
int[]a=…//输入阵列
int[]b=新的int[a.Length];//同样大小
int i,j;
如果(a.Length==0)
{
//返回一个零长度数组
}
i=0;
j=0;
while(i

仅此而已。

您可能希望在元素上循环,并将不连续的重复元素复制到新集合中:

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]
    }
}
公共类测试器{
公共静态void main(字符串[]args){
int[]值={0,0,0,1,1,1,0,0,0,0,2,2,2,3,3,0,0,0,0};
列表输出=新的ArrayList();
如果(value.length>0){
int previous=值[0];
输出。添加(上一个);
for(int值:值){
如果(上一个!=值){
增加(价值);
}
先前=值;
}
}
System.out.println(输出);//[0,1,0,2,3,0]
}
}

没有一个内置的数据结构可以为您实现这一点。谢谢!这很有效。正如@pwilmot所说的,似乎没有一个数据结构可以为您做到这一点。