簡體   English   中英

用其他ArrayList替換ArrayList的一部分

[英]Replace part of ArrayList with other ArrayList

是否有任何簡單的方法(例如庫函數)將一個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; 
}

其中replaceAll函數將從索引中替換文件ArrayList的元素,其中subList toReplace出現在替換列表元素中,這是要抓住的地方:toReplace和替換可能是大小不同的Lists。 因為如果它們的大小相同,我只需要使用“ for(E e:elements)”中的ArraList的set函數來實現。 因此,replace函數可以更改正在更改的ArrayList文件的大小。

你可以試試

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

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

通過方法,可以使用Collections.indexOfSubList查找窗口位置。

    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]

編寫一個實用程序方法來接受通用數組,並在找到所有可能的檢查后替換給定的子數組。

您可以測試是否存在子數組:

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

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

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

從那里可以找到插入點,並且可以使用庫來插入或編寫蠻力方法。 例如,您可以從“列表”界面獲取子列表,然后對該子列表進行更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM