第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么使用數(shù)組而不是字符串可以減少內(nèi)存消耗和執(zhí)行時間?

為什么使用數(shù)組而不是字符串可以減少內(nèi)存消耗和執(zhí)行時間?

慕神8447489 2022-11-30 13:21:19
給定 char 數(shù)組形式的字符串。將其修改為所有感嘆號符號“!” 被轉(zhuǎn)移到數(shù)組的開頭,并且所有 ohters 的順序相同。請編寫一個帶有單個 char[] 類型參數(shù)的方法。關(guān)注算法的內(nèi)存和時間消耗。我收到的反饋:可以使用數(shù)組而不是字符串。我在哪里可以找到有關(guān)內(nèi)存的信息?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條經(jīng)驗 獲得超11個贊

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

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

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

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

處理完整個輸入后,結(jié)果數(shù)組中與“結(jié)束指針”對應(yīng)的部分將向后,因此將其反轉(zhuǎn)。

你可以這樣做:

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);


查看完整回答
反對 回復(fù) 2022-11-30
  • 1 回答
  • 0 關(guān)注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號