01/10/2018, 15:42

Sự khác nhau giữa String và StringBuilder

ngày hôm qua em có chuyển team trong công ty .Thì em với PM có nói chuyện đại khái là trao đổi thôi .rồi đột nhiên trao đổi đến hai cái trên của java .Anh Pm bảo em
kể cả anh ko biết về String và StringBuilder từ trước rồi thì anh vẫn có thể biết được hai thằng này nó khác nhau như nào dựa vào kiến thức giải thuật của anh .Mà thực sự từ hôm qua sau hôm nói chuyện với anh ấy về thì mình hơi choáng suy nghĩ quá nhiều mà vẫn ko biết anh ấy dung kiến thức giải thuật nào để chứng mình sự khác nhau giữa hai cái này

Hung viết 17:45 ngày 01/10/2018

Source code của StringBuilder nè
http://grepcode.com/file_/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/StringBuilder.java/?v=source

Hung Nguyen viết 17:55 ngày 01/10/2018

em đang nghĩ mãi mà ko biết anh ấy dựa vào kiến thức nào đây

Hung viết 17:50 ngày 01/10/2018

Chả có gì gọi là giải thuật đâu
Đơn giản là nó cấp sẵn mảng 16 * n phần tử trong memory. Nếu vượt quá thì tạo mảng mới, copy mảng cũ qua, thêm nội dung, nhưng số phần tử vẫn là bội của 16

Đỗ Nhiên viết 17:50 ngày 01/10/2018

căn bản nếu bác ko đcọ code thì làm sao bác biết cấp sãn mảng 16*n và dựa vào cái giải thuật kỷ gió nào đây

Tao Không Ngu. viết 17:56 ngày 01/10/2018

Hi Hung Nguyen.
Theo mình thì có lẽ là do mục đích sử dụng một cái dùng để lưu trữ một cái dùng để mở rộng. Và con số 16 có lẽ là một số chọn cảm tính cũng có thể do thống kế nhưng nó không thực sự quan trọng vị khi khởi tạo có thể gán bằng số khác được.

anon52681320 viết 17:45 ngày 01/10/2018

hỏi ảnh lại là với giải thuật của anh, anh có biết Arrays.sort dùng kỹ thuật sort nào không?

Demon Hunter viết 17:57 ngày 01/10/2018

Gì mà kiến thức giải thuật nghe nguy hiểm dữ vại. String là đối tượng không thể thay đổi, còn StringBuilder thì ngược lại. Giải sử bạn khởi tạo String hello = “Hello”, sau đó bạn nối chuỗi hello = hello + “world” mặc dù cùng sử dụng đối tượng là hello nhưng internal nó là một đối tượng mới sau khi thay đổi. Theo mình nó là phạm trù về khái niệm không đọc qua nó là cái gì thì đếch biết đâu.
@Do_Nhien java doc để làm gì hả bạn :).

Tobi the Terrible viết 17:51 ngày 01/10/2018

Mình nghĩ anh đó dùng từ sai, cái này thực ra là nghiêng về software engineering & kinh nghiệm làm nhiều, ko phải giải thuật. Trong nhiều sách dạy về kĩ thuật lập trình, người ta thường khuyến khích đặt tên phản ánh đúng bản chất & chức năng của class để người khác đọc vào dễ nắm bắt & đoán được vai trò của class đó. Đối với design patterns, thì thường tên class gắn với khái niệm của patterns đó luôn.

Trong trường hợp của bạn, là hậu tố “-Builder”, String là kiểu chuỗi, StringBuilder -> 1 class hỗ trợ xây dựng chuỗi, chỉ cần nhìn vào tên là có thể đoán được vai trò, tất nhiên là nếu như muốn hiểu rõ thì vẫn phải đọc source của class đó

Bạn có thể tham khảo Clean code hoặc Clean coder để nắm rõ về phần này hơn

Bài liên quan
0