- Bài 1: Tổng quan ngôn ngữ Java
- Bài 2: Hướng dẫn cài đặt và cấu hình Java
- Bài 3: Hướng dẫn cài đặt và cấu hình Intellij IDEA trên Window
- Bài 4: Tạo Project và làm quen với Intelij IDEA
- Bài 5: Cú pháp và quy tắc cơ bản trong Java
- Bài 6: Các kiểu dữ liệu trong Java
- Bài 7: Các kiểu biến trong Java
- Bài 8: Toán tử trong Java
- Bài 9: Hệ thống Unicode trong Java
- Bài 10: Các kiểu vòng lặp
- Bài 11: Câu lệnh điều khiển rẽ nhánh
- Bài 12: Câu lệnh Break, Continue trong Java
- Bài 13: Lớp và đối tượng
- Bài 14: Tính chất của lập trình hướng đối tượng trong Java
- Bài 15: Abstract class và Interface trong Java
- Bài 16: Từ khóa super và this trong Java
- Bài 17: Từ khóa static và final trong Java
- Bài 18: Mảng (Array) trong Java
- Bài 19: Package trong Java
- Bài 21: String trong Java
- Bài 22: StringBuffer và StringBuilder
- Bài 23: Tổng quan về File và I/O
- Bài 24: Xử lý nhập xuất bằng Byte Stream và Character Stream
- Bài 25: Thao tác với tệp và thư mục trong Java
- Bài 26: Tổng quan về Collection trong Java
- Bài 27: Những Interface phổ biến trong Java Collection Framework
- Bài 28: Những Class được triển khai dựa trên Interface của Java Collection
- Bài 29: Khái niệm xử lý ngoại lệ trong Java
- Bài 30: Hướng dẫn xử lý ngoại lệ trong Java
- Bài 31: Đa luồng trong Java
- Bài 32: Thread synchronization trong Java
- Bài 33: Tổng quan về Java AWT
- Bài 34: Container trong Java AWT
- Bài 35: Component trong Java AWT
- Bài 36: Layout Manager trong Java AWT
- Bài 37: Xử lý sự kiện trong Java AWT
- Bài 38: Tổng quan về Java Swing
- Bài 39: Container trong Java Swing
- Bài 40: Component trong Java Swing
- Bài 41: Layout trong Java Swing
- Bài 42: Event trong Java Swing
- Bài 43: Menu trong Java Swing
- Bài 44: Kết nối cơ sở dữ liệu với thư viện JDBC trong Java
Bài 22: StringBuffer và StringBuilder - Lập trình Java cơ bản
Đăng bởi: Admin | Lượt xem: 3586 | Chuyên mục: Java
1. StringBuffer
Lớp StringBuffer trong Java được sử dụng để tạo chuỗi có thể sửa đổi (chuỗi dạng mutable). Lớp StringBuffer giống như lớp String trong Java, ngoại trừ ở điểm là nó là có thể sửa đổi.
Lớp StringBuffer là an toàn luồng (Thread-safe), ví dụ: nhiều Thread không thể truy cập nó đồng thời. Vì thế nó là an toàn và sẽ cho kết quả trong một thứ tự.
Các constructor quan trọng của StringBuffer:
- StringBuffer(): tạo một bộ đệm chuỗi trống với dung lượng capacity ban đầu là 16.
- StringBuffer(String str): tạo một bộ đệm chuỗi với chuỗi đã xác định.
- StringBuffer(int capacity): tạo một bộ đệm chuỗi trống với dung lượng capacity đã cho.
Các phương thức của StringBuffer:
Phương thức | Mô tả |
---|---|
append() | Phương thức này nối thêm một chuỗi hoặc một mảng ký tự tại vị trí cuối cùng của một đối tượng StringBuffer. Ví dụ: StringBuffer s1 = new StringBuffer(“Good”); s1.append(“evening”); s1 bây giờ là goodevening |
insert() | Phương thức này lấy hai tham số. Tham số đầu tiên là vị trí chèn. Tham số thứ hai có thể là một chuỗi, một ký tự (char), một giá trị nguyên (int), hay một giá trị số thực (float) được chèn vào. Vị trí chèn sẽ lớn hơn hay bằng đến 0, và nhỏ hơn hay bằng chiều dài của đối tượng Stringbuffer. Bất kỳ đối số nào, trừ ký tự hoặc chuỗi, được chuyển vào biểu mẫu chuỗi, và sau đó được chèn vào. Ví dụ: StringBuffer str = new StringBuffer(“Java sion”); str.insert(1,’b’); Biến “str” chứa chuỗi “Java sion”. |
charAt() | Phương thức này trả về một giá trị ký tự trong đối tượng StringBuffer tại vị trí được chỉ định. Ví dụ: StringBuffer str = new StringBuffer(“James Gosling”); char letter = str.charAt(6); //chứa “G” |
setCharAt() | Phương thức này được sử dụng để thay thế ký tự trong một StringBuffer với những cái khác tại một vị trí được chỉ định. Ví dụ: StringBuffer name = new StringBuffer(“Java”); name.setCharAt(2,’v’); Biến “name” chứa “Java”. |
setLength() | Phương thức này thiết lập chiều dài của đối tượng StringBuffer. Nếu chiều dài được chỉ định nhỏ hơn chiều dài nguyên thuỷ của bộ nhớ trung gian, thì các ký tự thừa sẽ bị cắt bớt. Nếu chiểu dài chỉ định nhiều hơn chiều dài nguyên thủy của bộ nhớ đệm, các ký tự null được thêm vào tại vị trí cuối cùng của bộ nhớ đệm. Ví dụ: StringBuffer str = new StringBuffer(10); str.setLength(str.legth() +10); |
getChars() | Phương thức này được sử dụng để trích ra các ký tự từ đối tượng StringBuffer, và sao chép chúng vào một mảng. Ví dụ: StringBuffer str = new StringBuffer(“Leopard”); char ch[] = new char[10]; str.getChars(3,6,ch,0); Bây giờ biến “ch” chứa “par” |
reverse() | Phương thức này đảo ngược nội dung của một đối tượng StringBuffer, và trả về một đối tượng StringBuffer. Ví dụ: StringBuffer str = new StringBuffer(“devil”); StringBuffer strrev = str.reverse(); Biến “strrev” chứa “lived”. |
2. StringBuilder
Lớp StringBuilder trong Java được sử dụng để tạo chuỗi có thể thay đổi (chuỗi dạng mutable). Lớp StringBuilder là giống như lớp StringBuffer ngoại trừ rằng nó là không đồng bộ. Lớp này có sẵn từ JDK 1.5.
Các constructor quan trọng của StringBuilder
- StringBuilder(): tạo một Builder trống với dung lượng capacity ban đầu là 16.
- StringBuilder(String str): tạo một Builder với chuỗi đã xác định.
- StringBuilder(int capacity): tạo một Builder trống với dung lượng capacity đã cho.
Các phương thức của StringBuilder là tương tự so với StringBuffer nhưng không được đồng bộ. Sau đây chúng ta sẽ làm rõ hơn ở phần so sánh 2 lớp này.
3. So sánh StringBuffer và StringBuilder
Có nhiều điểm khác nhau giữa lớp String và StringBuffer trong Java. Bảng dưới liệt kê các điểm khác nhau này:
StringBuffer | StringBuilder |
---|---|
Lớp StringBuffer là đồng bộ (synchronized), tức là an toàn luồng (thread safe). Nghĩa là hai Thread không thể gọi đồng thời các phương thức của lớp StringBuffer | StringBuilder là không đồng bộ (non-synchronized) tức là không an toàn luồng. Nghĩa là hai Thread có thể gọi đồng thời các phương thức của lớp StringBuilder |
StringBuffer là kém hiệu quả hơn StringBuilder | StringBuilder là hiệu quả hơn StringBuffer |
So sánh hiệu suất của StringBuffer và StringBuilder:
package com.company;
public class Main {
public static void main(String args[]) {
long startTime = System.currentTimeMillis();
StringBuffer sb = new StringBuffer("Java");
for (int i = 0; i < 100000; i++) {
sb.append("BkitSoftware");
}
System.out.println("Thoi gian tieu ton boi StringBuffer: " + (System.currentTimeMillis() - startTime) + "ms");
startTime = System.currentTimeMillis();
StringBuilder sb2 = new StringBuilder("Java");
for (int i = 0; i < 100000; i++) {
sb2.append("BkitSoftware");
}
System.out.println("Thoi gian tieu ton boi StringBuilder: " + (System.currentTimeMillis() - startTime) + "ms");
}
}
Thoi gian tieu ton boi StringBuffer: 16ms
Thoi gian tieu ton boi StringBuilder: 6ms
Từ ví dụ có thể thấy, StringBuilder có hiệu suất tốt hơn StringBuffer.
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!
- Bài 1: Tổng quan ngôn ngữ Java
- Bài 2: Hướng dẫn cài đặt và cấu hình Java
- Bài 3: Hướng dẫn cài đặt và cấu hình Intellij IDEA trên Window
- Bài 4: Tạo Project và làm quen với Intelij IDEA
- Bài 5: Cú pháp và quy tắc cơ bản trong Java
- Bài 6: Các kiểu dữ liệu trong Java
- Bài 7: Các kiểu biến trong Java
- Bài 8: Toán tử trong Java
- Bài 9: Hệ thống Unicode trong Java
- Bài 10: Các kiểu vòng lặp
- Bài 11: Câu lệnh điều khiển rẽ nhánh
- Bài 12: Câu lệnh Break, Continue trong Java
- Bài 13: Lớp và đối tượng
- Bài 14: Tính chất của lập trình hướng đối tượng trong Java
- Bài 15: Abstract class và Interface trong Java
- Bài 16: Từ khóa super và this trong Java
- Bài 17: Từ khóa static và final trong Java
- Bài 18: Mảng (Array) trong Java
- Bài 19: Package trong Java
- Bài 21: String trong Java
- Bài 22: StringBuffer và StringBuilder
- Bài 23: Tổng quan về File và I/O
- Bài 24: Xử lý nhập xuất bằng Byte Stream và Character Stream
- Bài 25: Thao tác với tệp và thư mục trong Java
- Bài 26: Tổng quan về Collection trong Java
- Bài 27: Những Interface phổ biến trong Java Collection Framework
- Bài 28: Những Class được triển khai dựa trên Interface của Java Collection
- Bài 29: Khái niệm xử lý ngoại lệ trong Java
- Bài 30: Hướng dẫn xử lý ngoại lệ trong Java
- Bài 31: Đa luồng trong Java
- Bài 32: Thread synchronization trong Java
- Bài 33: Tổng quan về Java AWT
- Bài 34: Container trong Java AWT
- Bài 35: Component trong Java AWT
- Bài 36: Layout Manager trong Java AWT
- Bài 37: Xử lý sự kiện trong Java AWT
- Bài 38: Tổng quan về Java Swing
- Bài 39: Container trong Java Swing
- Bài 40: Component trong Java Swing
- Bài 41: Layout trong Java Swing
- Bài 42: Event trong Java Swing
- Bài 43: Menu trong Java Swing
- Bài 44: Kết nối cơ sở dữ liệu với thư viện JDBC trong Java