亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么使用數組而不是字符串可以減少內存消耗和執行時間?

為什么使用數組而不是字符串可以減少內存消耗和執行時間?

慕神8447489 2022-11-30 13:21:19
給定 char 數組形式的字符串。將其修改為所有感嘆號符號“!” 被轉移到數組的開頭,并且所有 ohters 的順序相同。請編寫一個帶有單個 char[] 類型參數的方法。關注算法的內存和時間消耗。我收到的反饋:可以使用數組而不是字符串。我在哪里可以找到有關內存的信息?public static String formatString(char[] chars) {    StringBuilder exclamationSymbols = new StringBuilder();    StringBuilder otherSymbols = new StringBuilder();    for (char c : chars) {        if (c == '!') {            exclamationSymbols.append(c);        } else {            otherSymbols.append(c);        }    }    return (exclamationSymbols.toString() + otherSymbols.toString());}
查看完整描述

1 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

您可以使用 achar[]比使用 a 更快地執行此操作,StringBuilder因為:

  • aStringBuilder只是 a 的包裝器char[],所以它不可能更快。間接意味著它會更慢。

  • 您確切地知道結果將持續多長時間,因此您可以分配char[]您需要的最小尺寸。使用 a StringBuilder,您可以預先確定它的大小,但是使用兩個StringBuilders 則不能完全確定大小,因此您要么必須過度分配長度(例如,使兩者的長度都與 相同chars),要么依靠StringBuilder內部調整自身大?。ㄟ@會更慢比;它使用更多的內存)。

我的想法是使用兩個整數指針指向您將在字符串中寫入 char 的下一個位置:一個從數組的開頭開始,另一個從末尾開始;當您通過輸入進行操作時,兩個指針將靠得更近。

處理完整個輸入后,結果數組中與“結束指針”對應的部分將向后,因此將其反轉。

你可以這樣做:

char[] newChars = new char[chars.length];

int left = 0;

int right = chars.length;


for (char c : chars) {

  if (c == '!') {

    newChars[left++] = c;

  } else {

    newChars[--right] = c;

  }

}


// Reverse the "otherSymbols".

for (int i = right, j = newChars.length - 1; i < j; ++i, --j) {

  char tmp = newChars[i];

  newChars[i] = newChars[j];

  newChars[j] = tmp;

}


return new String(newChars);


查看完整回答
反對 回復 2022-11-30
  • 1 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號