当前位置: 代码迷 >> java >> 我可以使用addAll Collection方法将所有元素(类型:byte)从数组(byte [])添加到Byte类型的List中吗?
  详细解决方案

我可以使用addAll Collection方法将所有元素(类型:byte)从数组(byte [])添加到Byte类型的List中吗?

热度:128   发布时间:2023-07-17 20:09:54.0

我必须附加(可变数量)字节数组。 集合似乎只适用于包装类,即Byte。 大约20个小时后,我想出了这个,它有效,但我想知道它是否可以改进(添加到列表,但任何其他改进建议欢迎:),即

Collections.addAll方法将所有数组元素放到指定的集合中。 这就是调用Collections.addAll方法的方法。 它与Arrays.asList方法的作用相同但是它比它快得多,因此这是将数组转换为ArrayList的最佳方法。

这是它目前的测试版

public static byte[] joinArrays(byte[]... args) {

    List<Byte> arrayList = new ArrayList(); 

    for (byte[] arg : args) { // For all array arguments...
        for (int i = 0; i < arg.length; i++) { // For all elements in array
            arrayList.add(Byte.valueOf(arg[i])); // ADD TO LIST
        }
    }
    byte[] returnArray = new byte[arrayList.size()]; 

    for (int i = 0; i < arrayList.size(); i++) {
        returnArray[i] = arrayList.get(i).byteValue(); //Get byte from Byte List
    }
    return returnArray;
}

你可以坚持你的阵列,避免拳击/拆箱到Byte这样的事情:

public static byte[] joinArrays(byte[]... args) {
    int byteCount = 0;
    for (byte[] arg : args) { // For all array arguments...
        byteCount += arg.length;
    }
    byte[] returnArray = new byte[byteCount];
    int offset = 0;
    for (byte[] arg : args) { // For all array arguments...
        System.arraycopy(arg, 0, returnArray, offset, arg.length);
        offset += arg.length;
    }
    return returnArray;
}

这是一个变种

public static byte[] joinArrays(byte[]... args) {
    byte[] result = null; 
    if(args.length > 0) {
        result = args[0];
        for(int index = 1; index < args.length; index++){
            result = concat(result, args[index]);
        }       
    }
    return result;
}   

public static byte[] concat(byte[] a, byte[] b) {
    int aLen = a.length;
    int bLen = b.length;
    byte[] c= new byte[aLen+bLen];
    System.arraycopy(a, 0, c, 0, aLen);
    System.arraycopy(b, 0, c, aLen, bLen);
    return c;
}   
  相关解决方案