So sánh String và StringBuffer

1. Code sample

Chúng ta cùng tìm hiểu ví dụ bên dưới để cùng so sánh String và StringBuffer.

Tạo class StringVsStringBuffer.java

package com.loop.io;
import java.sql.Timestamp;
/**
* @author Cuder
*
*/
public class StringVsStringBuffer {
  /**
  * Create by Cuder
  */
  public static void main(String[] args) {
    System.out.println("Start time to plus 100000 String : " + new Timestamp(System.currentTimeMillis()));
    String str = "";
    for (int i = 0; i < 100000; i++) {
      str += "Item " + i;
    }
    System.out.println(" End : " + new Timestamp(System.currentTimeMillis()));

    System.out.println("Start time to plus 100000 StringBuffer : " + new Timestamp(System.currentTimeMillis()));
    StringBuffer strB = new StringBuffer();
    for (int i = 0; i < 100000; i++) {
      strB.append("Item " + i);
    }
    System.out.println(" End : " + new Timestamp(System.currentTimeMillis()));

    if (!str.equals(strB.toString())) {
      System.out.println("String not match !!");
    }
  }
}

Kết quả :

Start time to plus 100000 String : 2017-01-29 22:15:33.623
End : 2017-01-29 22:17:04.21
Start time to plus 100000 StringBuffer : 2017-01-29 22:17:04.211
End : 2017-01-29 22:17:04.26

2. Phân tích

Trước hết chúng ta phần tích qua chút đoạn code bên trên.

Đoạn code trên dùng 2 đối tượng String và StringBuffer để cộng 100000 string liên tục, để phân biệt về performance thì mình đã in ra thời giản trước và sau cho từng xử lý.

Để chắc chắn là kết quả cộng xâu của 2 xử lý trên là đúng, mình đã có đoạn code check, so sánh kết quả 2 xử lý. Nếu 2 kết quả ko trùng nhau sẽ in ra màn hình dòng thông báo : "String not match !!"

3. Kết quả

Các bạn có thể thấy kết quả khác lệch nhau như sau.

  • Xử lý với String hết ~ 1 phút 30s
  • Xử lý với StringBuffer hết ~ 0.05s

4. Kết luận

Chỉ nhìn vào kết quả các bạn cũng sẽ đồng ý luôn là StringBuffer có tốc độ xử lý nhanh hơn rất nhiều. Thế nhưng không phải lúc nào mình cũng sử dụng StringBuffer mà không sử dụng đối tượng String. Vậy trong nhưng trường hợp nào nên dùng String và trường hợp nào thì nên dùng StringBuffer.

Dưới đây là kinh nghiệm của mình trong việc dùng String và StringBuffer.

  • Sử dụng đối tượng String trong trường hợp xác định được số lượng chuỗi cần cộng thêm, cơ bản là nó là số lượng hạn chế không qua nhiều và phán đoán là không ảnh hưởng nhiều đến tốc độc xử lý.
  • Sử dụng đối tượng StringBuffer trong trường hợp không xác định được số lượng chuỗi sẽ cộng thêm, thường trong vòng lặp for , while ...

Việc sử dụng String hay StringBuffer thì cần phải chú ý trong những bài toán xử lý khối lượng data lớn, và các bạn cần linh hoạt xử lý để tối ưu tốc độ cũng như bộ nhớ.

Rate this post
Đinh Thế Hiển
 

Mình là người thích viết lách, chia sẻ các trải nghiệm trong cuộc sống. Thích thể thao đặc biệt là thể hình. Hãy kết nối với mình nhé.

Click Here to Leave a Comment Below 0 comments