Java字节集

Red*_*ion 2 java

任何人都可以帮助我知道如何在Java中使用"Set"字节?谢谢

pol*_*nts 10

Set<Byte> Java Collections Framework中的选项

如果您想利用Java Collections Framework,您可以拥有一个java.util.Set<Byte>.不幸的是,Java泛型不适用于原语.java.lang.Byte是的盒子类型byte.也许你可以使用的实现是一个TreeSet; 它是一个SortedSet,所以你可以按照byte它们的自然顺序对(盒装)进行排序.

也可以看看

相关问题


BitSet 表现选择

另一种选择是java.util.BitSet.这是一种非常节省时间和空间的数据结构,它使用位实现集合表示,即int i如果设置了位,则"在集合中" i.

BitSet 不属于Java Collections Framework.

这是一个示例用法:

    BitSet bytes = new BitSet();

    bytes.set(3);
    bytes.set(7);
    bytes.set(11);
    bytes.set(11);
    bytes.set(1000);

    System.out.println(bytes);
    // {3, 7, 11, 1000}

    System.out.println(bytes.cardinality()); // 4

    System.out.println(bytes.get(10)); // false
Run Code Online (Sandbox Code Playgroud)

请注意,您可能set位于byte范围之外.

实际上,您不能直接set在该byte范围内的所有位,因为它byte是Java中的signed数据类型.您可以使用位屏蔽任何转换byteint0..255范围如下:

    byte b = -1;
    // bytes.set(b); // throws IndexOutOfBoundsException
    bytes.set(b & 0xFF);
    System.out.println(bytes);
    // {3, 7, 11, 255, 1000}
Run Code Online (Sandbox Code Playgroud)

然后,您可以byte按如下方式迭代集合中的所有内容:

    for (int i = -1; (i = bytes.nextSetBit(i + 1)) != -1; ) {
        byte b = (byte) i;
        System.out.println(b);
    }
    // 3, 7, 11, -1, -24
Run Code Online (Sandbox Code Playgroud)

需要注意的是由于byte [-128,127]int [0,255]映射,底片来阳性后.BitSet也有利于高效率的操作集与其他BitSet一样or,and,xor,equals,intersects,等.

相关问题