」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 項目 注意字串連接效能

項目 注意字串連接效能

發佈於2024-11-08
瀏覽:108

1。使用運算子 ( ) 連接字串:
使用運算子連接字串對於少量連接來說很方便,但由於字串的不變性,在大規模操作時會出現效能問題。
每次建立新字串時,都會複製所有先前字串的內容,從而導致大型連接的時間成二次方。

不正確的例子(與 重複連接):

public String criaFatura(List itens) {
    String fatura = "";
    for (Item item : itens) {
        fatura  = item.toString();  // ineficiente para grandes listas
    }
    return fatura;
}

2.使用StringBuilder來提升效能:
不使用 ,而是使用 StringBuilder,它允許您有效地修改字串,根據需要動態分配記憶體。
使用 StringBuilder 的串聯時間是線性的,這顯著提高了效能。

正確範例(StringBuilder的使用):

public String criaFatura(List itens) {
    StringBuilder fatura = new StringBuilder(itens.size() * 80);  // pré-alocação
    for (Item item : itens) {
        fatura.append(item.toString());
    }
    return fatura.toString();
}

3.性能對比:
即使在 Java 6 進行了改進以優化運算符之後,使用 StringBuilder 仍然更有效率。在測試機上,在 100 個項目的場景中,使用 StringBuilder 比操作符快 6.5 倍。

沒有預先分配的最佳化範例:

public String criaFatura(List itens) {
    StringBuilder fatura = new StringBuilder();  // sem pré-alocação
    for (Item item : itens) {
        fatura.append(item.toString());
    }
    return fatura.toString();
}

4。這個故事的寓意:
不要用它來連接許多字串。隨著串聯數量的增加,效能很快就會變得不可接受。
使用 StringBuilder.append 或字元陣列等替代方案來進行大量連接。

5。其他選擇:
除了 StringBuilder 之外,您還可以考慮使用字元陣列進行大規模處理或更有效地組合字串,特別是在需要更好地控制效能時。

結論:
使用 StringBuilder 高效連接字串。
避免在循環或大量字串中使用運算符,因為隨著連接數量的增加,效能會顯著下降。

書中的例子:

Item  Cuidado com o desempenho da concatenação de string

Item  Cuidado com o desempenho da concatenação de string

版本聲明 本文轉載於:https://dev.to/giselecoder/item-63-cuidado-com-o-desempenho-da-concatenacaode-string-2b67?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 探索 JVM 虛擬執行緒機制中的固定
    探索 JVM 虛擬執行緒機制中的固定
    Java 的虚拟线程提供了传统操作系统线程的轻量级替代方案,从而实现了高效的并发管理。但了解他们的行为对于获得最佳表现至关重要。这篇博文深入探讨了固定(一种可能影响虚拟线程执行的场景),并探讨了监控和解决该问题的技术。 虚拟线程:一种轻量级并发方法 Java 的虚拟线程是运行在底层操...
    程式設計 發佈於2024-11-08
  • 如何在不使用分析函數的情況下有效率地選擇 MySQL 中每個類別的前幾行?
    如何在不使用分析函數的情況下有效率地選擇 MySQL 中每個類別的前幾行?
    在MySQL 中選擇每個類別的前幾行要從表中的每個類別中檢索有限數量的行,您可以使用分析函數。然而,MySQL 並不會直接提供這些功能。不過,可以使用變數來模擬它們。 模擬分析函數以下MySQL 查詢模擬分析函數的功能,以選擇每個類別的前3 行:SELECT x.* FROM ( SELEC...
    程式設計 發佈於2024-11-08
  • 了解 JavaScript 中的非同步程式設計:事件循環初學者指南
    了解 JavaScript 中的非同步程式設計:事件循環初學者指南
    Have you ever wondered why some pieces of JavaScript code seem to run out of order? The key to understanding this is the event loop. JavaScript's even...
    程式設計 發佈於2024-11-08
  • 如何使用 multiprocessing.Manager 在多個進程之間共用結果佇列?
    如何使用 multiprocessing.Manager 在多個進程之間共用結果佇列?
    使用multiprocessing.Manager 在多個進程之間共享結果隊列在多處理中,父子進程之間共享隊列對於通訊和結果檢索至關重要。然而,使用 apply_async 啟動非同步工作進程在共享佇列方面提出了挑戰。 為了克服「佇列物件只能透過繼承在進程之間共享」錯誤,我們可以利用 multipr...
    程式設計 發佈於2024-11-08
  • 如何在Visual Studio Code中設定Python調試的工作目錄?
    如何在Visual Studio Code中設定Python調試的工作目錄?
    如何設定使用 VS Code 的調試器調試 Python 程式的工作目錄? 使用 Visual Studio Code 偵錯 Python 程式時 ( VS Code),指定工作目錄對於確保腳本正確運作至關重要。 要在啟動設定檔(launch.json) 中設定工作目錄,請依照下列步驟操作: 開啟l...
    程式設計 發佈於2024-11-08
  • 為什麼 Matplotlib 的動畫程式碼要使用尾隨逗號?
    為什麼 Matplotlib 的動畫程式碼要使用尾隨逗號?
    揭開Matplotlib動畫中的尾隨逗號:它是逗號運算子嗎? 在使用Matplotlib創建簡單動畫的程式碼片段中,變數行後面可以觀察到逗號:line, = ax.plot(x, np.sin(x))這個逗號讓一些開發者感到困惑,導致有人質疑它是否代表逗號運算子。 消除逗號運算子神話此上下文中的尾隨...
    程式設計 發佈於2024-11-08
  • 在 Laravel 中將花式文本標準化為普通文本
    在 Laravel 中將花式文本標準化為普通文本
    文章源自https://medium.com/@hafiqiqmal93/normalizing-fancy-text-to-normal-text-in-laravel-7d9ed56d5a78 使用者輸入的文字一點也不有趣。隨著 Unicode 在智慧型手機中的出現,用戶現在可以奢侈地(有時甚...
    程式設計 發佈於2024-11-08
  • 4 種頂級 API 測試工具指南
    4 種頂級 API 測試工具指南
    在 API 测试方面,拥有正确的工具可以带来巨大的改变。在本文中,我们将探讨 2024 年可用的一些最佳 API 测试工具,适合各个级别的开发人员。 回声API EchoAPI 是一种新兴且快速发展的 API 开发协作工具。与 Postman 不同,它有几个明显的优势,使其成为 P...
    程式設計 發佈於2024-11-08
  • 如何解決多項目 Gradle 配置中的測試依賴?
    如何解決多項目 Gradle 配置中的測試依賴?
    解決多項目Gradle 配置中的測試依賴關係在Gradle 中處理多項目建置時,必須在跨專案的測試程式碼之間建立有效的依賴關係。考慮專案 A 和專案 B 存在的場景,專案 B 依賴專案 A 的元件。 問題陳述在這種情況下,項目 B 的 build.gradle 可能如下所示:apply plugin...
    程式設計 發佈於2024-11-08
  • 如何在 Rust 中合理地組織你的 Tauri 命令
    如何在 Rust 中合理地組織你的 Tauri 命令
    在建立 Tauri 應用程式時,保持程式碼庫井然有序非常重要,尤其是隨著專案的成長。相信我,作為一個對 Rust 比較陌生的人,我也遇到過不少混亂的情況——花幾個小時把自己從自己挖的坑裡挖出來。如果你跟我一樣,你就會想避免這種情況。那麼,讓我們討論一下如何透過將 Tauri 命令拆分為單獨的檔案來保...
    程式設計 發佈於2024-11-08
  • ## 如何在 Docker 映像中預先快取 Go 依賴項以加快建置速度?
    ## 如何在 Docker 映像中預先快取 Go 依賴項以加快建置速度?
    利用預先快取的依賴關係高效建置 Docker 映像建置 Docker 映像時,最大限度地減少建置時間至關重要。一種策略是快取相依性。然而,這需要先建立依賴項,這可能會很耗時。 有沒有辦法預先建立 go.mod 檔案中列出的多個依賴項? 答案在於利用 Docker 的快取機制。建議的 Dockerfi...
    程式設計 發佈於2024-11-08
  • 如何刪除重複行同時保留最舊的提交?
    如何刪除重複行同時保留最舊的提交?
    管理重複行:保留最舊的提交重複資料會顯著影響任何資料庫的完整性和可用性。在這種情況下,我們的目標是根據subscriberEmail欄位消除重複行,只保留原始提交。 為了在不訴諸表交換技術的情況下實現這一點,我們可以使用以下SQL查詢: delete x from myTable x join m...
    程式設計 發佈於2024-11-08
  • 如何處理MySQL表名中的特殊字元?
    如何處理MySQL表名中的特殊字元?
    處理MySQL表名中的特殊字符MySQL將某些字符保留為特殊字符,這些字符在不經意使用時可能會與表名發生衝突。在給定的場景中,表名「e!」中的感嘆號 (!)資料插入時發生錯誤。 為了解決這個問題,MySQL 允許在使用特殊字元時用反引號 (`) 將表名括起來。這有效地“轉義”了特殊字符,並允許將其識...
    程式設計 發佈於2024-11-08
  • 了解 JVM 鎖優化
    了解 JVM 鎖優化
    并发对于开发可以执行多个并发操作的健壮、可扩展的应用程序非常关键。然而,为此需要付出同步方面的代价。由于获取和释放锁的随之而来的开销,它会产生性能成本。为了减轻这些性能成本,JVM 中融入了多种优化,例如偏向锁定、锁定消除、锁定粗化以及轻量级和重量级锁定的概念。 在本文中,我们将更详细地了解这些优化...
    程式設計 發佈於2024-11-08
  • 測試驅動開發 (TDD):嚴格的軟體開發方法
    測試驅動開發 (TDD):嚴格的軟體開發方法
    定義 TDD 測試驅動開發(TDD)是一種軟體開發方法,強調在編寫生產程式碼之前編寫測試。這是一種嚴格的方法,透過測試推動開發,有助於確保高品質的程式碼。 理解 TDD TDD 是一個循環過程,涉及三個關鍵步驟: 紅色:編寫定義程式碼所需行為的失敗測試。此步驟有助於澄清需求並確保測試集中於期望...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3