簡體   English   中英

僅旋轉陣列中某些元素的最快方法是什么?

[英]What's the fastest way to only rotate certain elements in an array?

我正在為字符串寫一個字形擾亂器,除了第一個和最后一個字母之外,它們都會旋轉它們的位置。 但是,我應該只看第二到第二個字母。 我怎么才能從最后一封信到最后一封信?

例如,將“string”爭奪到“srintg”

我可以在通過拆分字符串創建的字符數組上調用Collections.rotate(),但這會擾亂整個單詞。

List<String> newWordList = Arrays.asList(word.split(" "));
Collections.rotate(newWordList, -1);
String newWord = String.join("", newWordList);

我想得到輸出“srintg”,但我會得到“rintgs”。

如果您的單詞足夠長以使其合理(至少四個字母),您可以通過旋轉列表的子列表來使您呈現的方法起作用:

Collections.rotate(newWordList.subList(1, newWordList.size() - 1), -1);

List.subList()創建List列表的一部分的視圖,其確切目的是避免使用對元素的索引子范圍進行操作的版本重載List方法。 在快速寫入的意義上,這是“快速的”,而且相當清楚。

但是,如果你在性能意義上尋找“快速”,那么拆分和連接字符串似乎是不明智的。 快速est可能不是我們可以提供的東西,因為性能需要測試,但如果我正在尋找最佳性能,那么我將測試至少這些一般方法:

  • 使用您的單詞的數組形式
    1. 使用String.toCharArray()以數組形式獲取單詞的字母。
    2. 使用索引for循環旋轉數組中的字符。
    3. 從修改后的數組構造一個新的String (使用適當的構造函數)。
  • 使用StringBuilder來組合單詞
    1. 創建一個初始容量等於字長的StringBuilder
    2. 使用CharacterIterator迭代單詞的字母,按所需順序將它們附加到構建器。 這可以一次完成。
    3. 從構建器獲取結果字符串。

暫無
暫無

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

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