Java 用其他ArrayList替换部分ArrayList

Java 用其他ArrayList替换部分ArrayList,java,arraylist,replace,Java,Arraylist,Replace,是否有任何简单的方法(例如库函数)将一个ArrayList的片段替换为另一个ArrayList? 我想做的是: ArrayList<Byte> fileArr = // some bytes // ArrayList<Byte> toReplace = // some bytes I want to replace in fileArray // ArrayList<Byte> window = // window with bytes from fil

是否有任何简单的方法(例如库函数)将一个ArrayList的片段替换为另一个ArrayList? 我想做的是:

 ArrayList<Byte> fileArr = // some bytes //
 ArrayList<Byte> toReplace = // some bytes I want to replace in fileArray //
 ArrayList<Byte> window = // window with bytes from file and size of toReplace List  //
 ArrayList<Byte> replacing = // bytes I want to replace with //
 for(int i = 0; i <= (maxElementOfFileArray - sizeOfToReplace); i++){
 window = fileArr.subList(i, i+sizeOfToReplace) 
 if(window.equals(toReplace){
      fileArr.replaceAll(i, toReplace, replacing) 
 }
i= indexOfReplacingListFinishInFileList -1; 
}
arraylistfilearr=//一些字节//
ArrayList toReplace=//我想在fileArray中替换的一些字节//
ArrayList window=//包含文件字节和存储替换列表大小的窗口//
ArrayList replacing=//我要替换为的字节//
对于(inti=0;i您可以尝试

fileArr.removeRange(i, i+sizeOfToReplace);
fileArr.addAll(i, replacing);

可以清除,然后将新元素添加到窗口中

通过您可以使用的方法来查找窗口位置

    List<Byte> fileArr = new ArrayList(Arrays.asList(new Byte[]{1, 2, 3, 4, 5, 6}));
    List<Byte> toReplace = Arrays.asList(new Byte[]{3, 4});
    List<Byte> replacing = Arrays.asList(new Byte[]{13, 14, 15, 16, 17, 18});

    int idx = Collections.indexOfSubList(fileArr, toReplace);

    if (idx >= 0) {
        List<Byte> window = fileArr.subList(idx, idx + toReplace.size());
        window.clear();
        window.addAll(replacing);
    }

    System.out.println(fileArr);


    [1, 2, 13, 14, 15, 16, 17, 18, 5, 6]
List fileArr=newarraylist(Arrays.asList(新字节[]{1,2,3,4,5,6}));
List-toReplace=Arrays.asList(新字节[]{3,4});
列表替换=Arrays.asList(新字节[]{13,14,15,16,17,18});
int idx=Collections.indexofpublist(fileArr,toReplace);
如果(idx>=0){
列表窗口=fileArr.subList(idx,idx+toReplace.size());
window.clear();
window.addAll(替换);
}
System.out.println(fileArr);
[1, 2, 13, 14, 15, 16, 17, 18, 5, 6]

编写一个实用程序方法来接受通用数组,并用所有可能的检查替换给定的子数组(如果找到)

您可以测试子阵列是否存在:

    int firstIndex = Collections.indexOfSubList(source, target);

    if (firstIndex == -1 ){
        // the sublist doesn't exist
    }

    int lastIndex = Collections.lastIndexOfSubList(source, target);

从那里你有了插入点,可以使用库插入或编写暴力方法。例如,你可以从列表界面获取子列表,并对该子列表进行更改。

检查ArrayList的代码,这主要是使用System.arraycopy来完成的,所以速度应该不会太慢。有一个循环为空在数组末尾的数据,所以如果你做了很多,考虑测试一个自定义方法是否更有效。然而,ReleFange是受保护的抽象列表函数,所以我不得不用“FieleR.Salistor(I,I+siZeFoToRePoice).Car()”间接调用它。非常感谢。