Giới thiệu về các cấu trúc dữ liệu tích hợp sẵn khác nhau trong Java và so sánh nó khác với cấu trúc dữ liệu do người dùng định nghĩa như thế nào.

Bạn đang xem : kiểu dữ liệu dựng sẵn trong java

Trong bài viết này, chúng ta sẽ hiểu các cấu trúc dữ liệu dựng sẵn khác nhau được sử dụng trong Java. Đến cuối bài viết này, bạn sẽ có cái nhìn tổng quan về cách cấu trúc dữ liệu tích hợp hiệu quả hơn cấu trúc dữ liệu do người dùng định nghĩa trong Java.

Bạn cũng sẽ học cách làm việc với cấu trúc dữ liệu tích hợp sẵn.

Mục lục

Giới thiệu

Theo Wikipedia, cấu trúc dữ liệu là một định dạng tổ chức, quản lý và lưu trữ dữ liệu cho phép truy cập và sửa đổi hiệu quả.

Chính xác hơn, cấu trúc dữ liệu là tập hợp các giá trị dữ liệu, mối quan hệ giữa chúng và các chức năng hoặc phép toán có thể được áp dụng cho dữ liệu.

Cấu trúc dữ liệu tích hợp so với người dùng xác định

Có thể tự tạo các cấu trúc dữ liệu như Ngăn xếp hoặc Hàng đợi bằng cách sử dụng các cấu trúc dữ liệu cơ bản khác. Ví dụ: Ngăn xếp có thể được tạo bằng Mảng hoặc Danh sách được liên kết. Chúng được gọi là cấu trúc dữ liệu do người dùng xác định.

Cấu trúc dữ liệu dựng sẵn không yêu cầu tạo cấu trúc dữ liệu từ đầu. Tuy nhiên, chúng ta có thể sử dụng các phương thức dựng sẵn để trừu tượng hóa hoạt động của cấu trúc dữ liệu.

Việc sử dụng cấu trúc dữ liệu tích hợp đã cải thiện năng suất của nhà phát triển, vì việc viết các thao tác cho cấu trúc dữ liệu do người dùng xác định tốn nhiều thời gian và không thể đảm bảo hiệu quả. Ngoài ra, cấu trúc dữ liệu tích hợp thường được viết với độ phức tạp về không gian và thời gian hiệu quả nhất.

Độ phức tạp về thời gian và không gian là các thước đo của mã để đảm bảo sử dụng hiệu quả thời gian và bộ nhớ trong khi chạy đoạn mã. Bằng cách giảm bớt những phức tạp này, hiệu quả của cấu trúc dữ liệu có thể được cải thiện.

Cấu trúc dữ liệu

Bây giờ, chúng ta hãy xem xét một số cấu trúc dữ liệu tích hợp sẵn và chúng ta sẽ xem cách làm việc với chúng.

ArrayList

Trong gói java.util , ArrayList là một cấu trúc dữ liệu tích hợp rất giống với Array .

Sự khác biệt giữa Array ArrayList là kích thước. Trong Array , độ dài là cố định, do đó, bộ nhớ được cấp phát để lưu trữ các giá trị là cố định. Trong khi, trong ArrayList , danh sách có thể thay đổi kích thước, cho phép nhà phát triển chọn kích thước động. Tại đây, bộ nhớ được tạo động.

Cú pháp để tạo ArrayList:

  

nhập

java.util.ArrayList

;

// Nhập lớp ArrayList

ArrayList

& lt;

Chuỗi

​​& gt;

list1

=

mới

ArrayList

& lt;

Chuỗi

& gt; ();

// Tạo một đối tượng ArrayList

Trước khi tiếp tục với các phương thức tích hợp, hãy xây dựng một hàm do người dùng định nghĩa để hiển thị tất cả các phần tử của ArrayList . < / p>

  

void

printArrayList

(

ArrayList

& lt;

Chuỗi

& gt;

danh sách

)

{

cho

(

int

i

​​=

0

;

i

​​& lt; danh sách

.

kích thước

();

i

​​++)

{

Hệ thống

.

ra

.

in ra

(

danh sách

.

lấy

(

i

)

+

""

);

}

Hệ thống

.

ra

.

println

();

}

Thêm phần tử

Khi sử dụng Mảng , chúng tôi phải gán các giá trị hoặc biến theo cách thủ công cho chỉ mục cụ thể. Tuy nhiên, trong ArrayList , việc thêm các phần tử vào danh sách trở nên đơn giản hơn với việc sử dụng phương thức add () .

Ví dụ:

  list1 

.

thêm

(

"Xin chào"

);

// Thêm "Xin chào" vào ArrayList

printArrayList

();

// OUTPUT: list1 = ["Xin chào"]

list1

.

thêm

(

"Thế giới"

) ;

// Thêm "Thế giới" vào ArrayList

printArrayList

();

// OUTPUT: list1 = ["Xin chào", "Thế giới"]

Đầu ra:

  Xin chào
Chào thế giới
 

Cập nhật các phần tử trong Mảng tương tự như việc bổ sung, trong đó chỉ mục của mảng được tìm thấy và thay thế bằng giá trị mong muốn.

Trong ArrayList , chúng tôi sử dụng phương thức set (index, value) để thay thế phần tử value tại một index < / code>.

Ví dụ:

  list1 

.

bộ

(

1

,

"Chào mừng"

);

// Thay thế "Thế giới" bằng "Chào mừng" trong danh sách1

printArrayList

();

// OUTPUT: list1 = ["Xin chào", "Chào mừng"]

Đầu ra:

  Xin chào, Chào mừng
 

Xóa các phần tử

Trong Array , không thể xóa các phần tử vì bộ nhớ được cấp là cố định.

Trong ArrayList , việc loại bỏ các phần tử có thể được thực hiện bằng phương thức remove (int index) . Khi chỉ định index , ArrayList sẽ xóa phần tử khỏi bộ nhớ và các phần tử còn lại được di chuyển để lấp đầy không gian. Do đó, nó tiết kiệm bộ nhớ hơn.

Ví dụ:

  list1 

.

xóa

(

0

);

// Xóa "Hello" khỏi list1

printArrayList

();

// OUTPUT: list1 = ["Chào mừng"]

list1

.

xoá

(

1

);

/ / Xóa phần tử khỏi danh sách trống

printArrayList

();

// Ngoại lệ

Đầu ra:

  Chào mừng
java.lang.IndexOutOfBoundsException: Chỉ mục 

1

ngoài giới hạn

cho

chiều dài

​​0

Danh sách được liên kết

Danh sách được liên kết là cấu trúc dữ liệu tuyến tính được kết nối bằng cách sử dụng con trỏ và lưu giữ dữ liệu. Con trỏ được sử dụng để lưu trữ và quản lý địa chỉ của các khối bộ nhớ được cấp phát động. Việc phân bổ bộ nhớ không liền nhau, điều này làm cho nó tốt hơn so với việc sử dụng Mảng.

Trong khi tạo danh sách được liên kết trong Java, chúng ta phải tạo một lớp để xác định cấu trúc của mọi nút của danh sách được liên kết. Dưới đây là một lớp mẫu thể hiện việc tạo con trỏ trong danh sách liên kết do người dùng xác định:

  

lớp

Nút

{

// Lớp nút chứa một con trỏ và dữ liệu

Nút tiếp theo

;

// 'tiếp theo' được sử dụng làm con trỏ

int

data

;

// 'dữ liệu' được sử dụng để lưu trữ các giá trị trong nút

// Khối mã lệnh khởi tạo các biến

Nút

()

{

tiếp theo

=

null

;

dữ liệu

=

0

;

}

}

Trong gói java.util , chúng tôi đơn giản hóa các tác vụ xử lý bộ nhớ tạo theo cách thủ công bằng cách sử dụng cấu trúc dữ liệu LinkedList . Nó chứa các phương pháp được xác định trước để xây dựng cấu trúc dữ liệu danh sách liên kết.

Cú pháp để tạo cấu trúc dữ liệu LinkedList :

  

nhập

java.util.LinkedList

;

// Nhập gói

LinkedList

& lt;

Chuỗi

​​& gt;

list2

=

mới

LinkedList

& lt;

Chuỗi

& gt; ();

// Tạo đối tượng mới

Trước khi tiếp tục với các phương thức tích hợp, hãy xây dựng một hàm do người dùng xác định để hiển thị tất cả các phần tử của LinkedList .

  

void

printLinkedList

(

LinkedList

& lt;

Chuỗi

& gt;

danh sách

)

{

cho

(

int

i

​​=

0

;

i

​​& lt; danh sách

.

kích thước

();

i

​​++)

{

Hệ thống

.

ra

.

in ra

(

danh sách

.

lấy

(

i

)

+

""

);

}

Hệ thống

.

ra

.

println

();

}

Thêm phần tử

Trong cấu trúc dữ liệu danh sách liên kết do người dùng xác định, khi thêm dữ liệu mới, chúng tôi phải di chuyển con trỏ và gán dữ liệu theo cách thủ công. Trong khi đó, trong cấu trúc dữ liệu LinkedList , chúng tôi sử dụng các phương thức add (Object) hoặc add (int index, Object) để thêm mới các yếu tố.

Ví dụ:

  list2 

.

thêm

(

"Xin chào"

);

// Thêm "Xin chào" vào danh sách LinkedList2

printLinkedList

();

// ĐẦU RA: ["Xin chào"]

list2

.

thêm

(

"Thế giới"

) ;

// Thêm "Thế giới" vào danh sách LinkedList2

printLinkedList

();

// ĐẦU RA: ["Xin chào", "Thế giới"]

list2

.

thêm

(

1

,

"Máy tính "

);

// Thêm" Máy tính "vào danh sách LinkedList2 ở chỉ mục 1

printLinkedList

();

// ĐẦU RA: ["Xin chào", "Máy tính", "Thế giới"]

Đầu ra:

  Xin chào
Chào thế giới
Xin chào Thế giới máy tính
 

Đang cập nhật các phần tử

Để cập nhật các phần tử trong danh sách liên kết do người dùng xác định, chúng tôi phải duyệt qua toàn bộ danh sách được liên kết từ con trỏ “HEAD” để cập nhật dữ liệu cụ thể.

Cấu trúc dữ liệu

LinkedList tóm tắt toàn bộ quá trình bằng phương thức set (index, data) .

Ví dụ:

  list2 

.

bộ

(

0

,

"Chào mừng"

);

// Cập nhật chuỗi ở chỉ mục 0 thành "Chào mừng"

printLinkedList

();

// ĐẦU RA: ["Chào mừng", "Máy tính", "Thế giới"]

Đầu ra:

  Chào mừng Thế giới máy tính
 

Xóa các phần tử

Tương tự, khi xóa một phần tử trong danh sách liên kết do người dùng xác định có thể phức tạp, trong đó con trỏ của phần tử trước đó được trỏ đến địa chỉ của phần tử tiếp theo. Khi làm việc với dữ liệu khổng lồ, việc làm việc với con trỏ không hề đơn giản.

Việc xóa một phần tử trong danh sách liên kết do người dùng xác định sẽ xảy ra như được đề cập trong các bước bên dưới:

  • Khởi tạo một con trỏ node dưới dạng node = head .
  • Duyệt qua danh sách được liên kết cho đến khi bạn đến phần tử ( node.next.val! = value ) mà bạn muốn xóa.
  • Khi đến nút, chúng tôi trỏ nút tới node.next.next , có nghĩa là, chúng tôi trỏ nút trước đó đến nút tiếp theo. node = node.next.next .

Bằng cách sử dụng cấu trúc dữ liệu tích hợp, chúng ta có thể tránh sử dụng phương thức remove (Object) để xóa các phần tử khỏi danh sách được liên kết.

Ví dụ:

  list2 

.

xóa

(

1

);

// Xóa "Máy tính" khỏi list2

printLinkedList

();

// ĐẦU RA: ["Chào mừng", "Thế giới"]

list2

.

xoá

(

0

);

/ / Xóa "Chào mừng" khỏi danh sách2

list2

.

xoá

(

0

);

/ / Xóa "Thế giới" khỏi danh sách2

printLinkedList

();

// Danh sách trống

list2

.

xoá

(

0

);

/ / Xóa các phần tử khỏi danh sách trống

Đầu ra:

  Chào mừng Thế giới

java.lang.IndexOutOfBoundsException: Chỉ mục 

0

ngoài giới hạn

cho

chiều dài

​​0

HashMap

Bản đồ là một cấu trúc dữ liệu giúp chúng tôi ánh xạ các cặp Khóa và Giá trị. Tương tự, trong Java, chúng tôi sử dụng HashMap , dùng để băm Khoá theo một chỉ mục. Bằng cách băm, chúng tôi sẽ có thể truy cập Giá trị bằng cách chỉ định chỉ mục.

Cú pháp để tạo HashMap :

  

nhập

java.util.HashMap

;

// Nhập gói

HashMap

& lt;

Integer

,

Chuỗi

​​& gt;

map1

=

mới

HashMap

& lt;

Số nguyên

,

Chuỗi

​​& gt; ();

// Tạo một đối tượng HashMap

Thêm phần tử

HashMap là một cấu trúc dữ liệu quan trọng, khi ánh xạ khóa và giá trị giúp truy cập các phần tử có độ phức tạp thời gian trung bình rất nhỏ là O (1). Để ánh xạ một khóa với một giá trị, chúng ta có thể sử dụng phương thức put (key, value) .

Độ phức tạp về thời gian trung bình để thêm hoặc truy cập hoặc xóa một phần tử bằng HashMap là O (1).

Ví dụ:

  map1 

.

đặt

(

0

,

"A"

);

// Ánh xạ (0, "A") và băm khóa

map1

.

đặt

(

1

,

"B "

);

// Ánh xạ (1," B ") và băm khóa

Hệ thống

.

ra

.

println

( map1

);

// ĐẦU RA: map1 = {0 = "A", 1 = "B"}

Đầu ra:

  

{

0

=

A, 1

=

B

}

Đang cập nhật các phần tử

Tương tự, khi cập nhật các phần tử, chúng tôi một lần nữa có thể sử dụng cùng một phương pháp mà chúng tôi đã sử dụng khi thêm một phần tử mới.

Ví dụ:

  map1 

.

đặt

(

0

,

"B"

);

// Ánh xạ (0, "B") và băm khóa

map1

.

đặt

(

1

,

"C "

);

// Ánh xạ (1," C ") và băm khóa

Hệ thống

.

ra

.

println

( map1

);

// ĐẦU RA: map1 = {0 = "B", 1 = "C"}

Đầu ra:

  

{

0

=

B, 1

=

C

}

Xóa các phần tử

Khi xóa ánh xạ khỏi HashMap , chúng tôi sẽ sử dụng phương thức remove (index) để xóa giá trị cho chỉ mục được đề cập.

Ví dụ:

  map1 

.

xóa

(

0

);

// Xóa ánh xạ (0, "B") khỏi map1

Hệ thống

.

ra

.

println

( map1

);

// ĐẦU RA: map1 = {1 = "C"}

Đầu ra:

  

{

1

=

C

}

Ngăn xếp

Một Stack là một cấu trúc dữ liệu tuyến tính rất giống với cấu trúc của ArrayList. Tuy nhiên, nó dựa trên nguyên tắc Last-In-First-Out (LIFO). Nói một cách đơn giản hơn, LIFO có thể được giải thích là phần tử nào được thêm vào sau cùng, thì phần tử đó phải được loại bỏ trước.

Vì đây là cấu trúc dữ liệu tuyến tính dựa trên nguyên tắc LIFO, nên không thể truy cập phần tử cuối cùng bằng cách chỉ định chỉ mục. Có thể tránh được một loạt các bước để truy cập các giá trị tại một chỉ mục cụ thể bằng cách sử dụng cấu trúc dữ liệu Stack .

Cú pháp để xây dựng cấu trúc dữ liệu Stack :

  

nhập

java.util.Stack

;

// Nhập gói Ngăn xếp

Ngăn xếp

& lt;

Số nguyên

& gt;

ngăn xếp

=

mới

Ngăn xếp

& lt;

Số nguyên

& gt; ();

// Tạo đối tượng cho Ngăn xếp

Thêm phần tử

Thêm phần tử còn được gọi là “PUSH”. Vì ngăn xếp chỉ hoạt động dựa trên một con trỏ duy nhất nên chỉ có thể thực hiện 2 thao tác. Để đẩy giá trị vào Stack , chúng tôi sử dụng phương thức push (value) .

Ví dụ:

  stack 

.

push

(

10

);

// Đẩy giá trị 10 vào Stack

ngăn xếp

.

đẩy

(

11

);

/ / Đẩy giá trị 11 vào ngăn xếp

// ĐẦU RA: stack = [10, 11]

Xóa các phần tử

Tương tự, để xóa một phần tử khỏi Stack , chúng tôi sẽ sử dụng phương thức pop () . Ở đây, chúng ta không cần chỉ định chỉ mục, vì theo mặc định, nó sẽ xóa phần tử được thêm cuối cùng theo nguyên tắc.

Ví dụ:

  stack 

.

pop

();

// Xóa 11 khỏi Stack

// ĐẦU RA: stack = [10]

ngăn xếp

.

pop

()

// Xóa 10 khỏi Ngăn xếp

// ĐẦU RA: EmptyStackException

Nếu Stack của bạn trống, tức là (stack.size () == 0) , thì sẽ xuất hiện các phần tử là không thể. Nếu bạn vẫn tiếp tục với phương thức pop () , thì nó sẽ tạo ra một ngoại lệ có tên là EmptyStackException .

Hàng đợi

Ngoài ra, Queue là một cấu trúc dữ liệu tuyến tính, hoạt động theo nguyên tắc Nhập trước - Xuất trước (FIFO). Phần tử được thêm đầu tiên vào hàng đợi, trước tiên phải được xóa khỏi hàng đợi.

Cú pháp để tạo cấu trúc dữ liệu Queue :

  

nhập

java.util.Queue

;

// Nhập gói Hàng đợi

Hàng đợi

​​& lt;

Số nguyên

& gt;

hàng đợi

​​=

mới

Hàng đợi

​​& lt;

Số nguyên

& gt; ();

// Tạo đối tượng mới

Thêm phần tử

Việc thêm các phần tử vào hàng đợi có thể được thực hiện bằng cách sử dụng phương thức add (value) .

Ví dụ:

  queue 

.

thêm

(

1

);

// 1 được thêm vào hàng đợi

hàng đợi

.

thêm

(

2

);

/ / 2 được thêm vào hàng đợi

// ĐẦU RA: queue = [1, 2]

Xóa các phần tử

Trong Queue , việc xóa các phần tử được gọi là "Thăm dò ý kiến". Việc thăm dò ý kiến ​​có thể được thực hiện ở một đầu của hàng đợi, được gọi là đầu "Phía sau". Tương tự, việc thêm có thể được thực hiện ở đầu đối diện được gọi là đầu "Mặt trước".

Ví dụ:

  queue 

.

thăm dò ý kiến ​​

();

// Xóa 1 khỏi hàng đợi

// ĐẦU RA: queue = [2]

Kết luận

Để kết thúc, chúng ta đã tìm hiểu về các cấu trúc dữ liệu tích hợp sẵn khác nhau trong Java. Chúng tôi cũng đã học cách làm việc với họ.

Tóm lại:

  • Chúng tôi đã tìm hiểu về các cấu trúc dữ liệu tích hợp sẵn khác nhau.

  • Chúng tôi đã so sánh chúng với cấu trúc dữ liệu do người dùng xác định.

  • Chúng tôi đã học cách làm việc với từng cấu trúc dữ liệu tích hợp sẵn.

Đọc thêm

Đóng góp đánh giá ngang hàng của Saiharsha Balasubramaniam


Xem thêm những thông tin liên quan đến chủ đề được xây dựng trong các kiểu dữ liệu trong java

06. Kiểu dữ liệu trong Java

  • Tác giả: TechMaster Vietnam
  • Ngày đăng: 2020-02-10
  • Đánh giá: 4 ⭐ ( 8341 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Giới thiệu về các kiểu dữ liệu cơ bản trong Java.

    Java có 2 kiểu dữ liệu chính:
    - Kiểu dữ liệu gốc hay kiểu dữ liệu nguyên thủy (primitive data types) bao gồm: boolean, char, byte, short, int, long, float, double.
    - Kiểu dữ liệu tham chiếu (reference data types) như String, Array, Object...

    Link khóa học Java căn bản tại TechMaster: https://techmaster.vn/khoa-hoc/e2l/lap-trinh-java-can-ban

Các kiểu dữ liệu trong java

  • Tác giả: kungfutech.edu.vn
  • Đánh giá: 5 ⭐ ( 2629 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Java có 2 loại kiểu dữ liệu là kiểu dữ liệu nguyên thủy và kiểu dữ liệu tham chiếu, trong đó có 8 kiểu dữ liệu nguyên thủy (Primitive Data type) đó là: boolean, byte, char, short, int, long, float, double.

Kiểu dữ liệu trong Java

  • Tác giả: vietjack.com
  • Đánh giá: 4 ⭐ ( 2479 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Kiểu dữ liệu trong Java - Học Java cơ bản và nâng cao cho người mới học về Ngôn ngữ hướng đối tượng, Ví dụ Java, Phương thức, Ghi đè, Tính kế thừa, Tính trừu tượng, Tính đa hình, Overriding, Inheritance, Polymorphism, Interfaces, Packages, Collections, Lập trình mạng, Đa luồng, Tuần tự hóa, Networking, Multithreading, Generics, Multimedia, Serialization, GUI.

Ví dụ Kiểu dữ liệu Boolean trong Java

  • Tác giả: saigontiepthi.vn
  • Đánh giá: 4 ⭐ ( 7688 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Mình cá là bạn vừa mới tiếp xúc với Java. Mới đầu, bạn đã phải làm quen với một đống khái niệm mới nào là biến, hàm, kiểu dữ liệu, lớp, đa hình, … còn rất rất

Các kiểu dữ liệu trong Java

  • Tác giả: viblo.asia
  • Đánh giá: 5 ⭐ ( 7028 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Biến trên thực tế là bộ nhớ để lưu một giá trị nào đó. Khi khai báo biến tức là ta đang khai báo với hệ thống dành riêng không gian trong bộ nhớ. Dựa trên kiểu dữ liệu của một biến, hệ điều hành cấp...

Các kiểu dữ liệu trong Java

  • Tác giả: laptrinhcanban.com
  • Đánh giá: 4 ⭐ ( 5661 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Cùng tìm hiểu về các kiểu dữ liệu trong Java. Dữ liệu trong Java được phân thành 2 kiểu dữ liệu lớn, đó là kiểu dữ liệu nguyên thủy với 8 kiểu con trong nó, và kiểu còn lại là kiểu dữ liệu đối tượng ,

Các Kiểu Dữ Liệu Trong Java

  • Tác giả: techacademy.edu.vn
  • Đánh giá: 4 ⭐ ( 10000 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bất cứ một ngôn ngữ lập trình nào cũng có một tập các kiểu dữ liệu, kiểu dữ liệu là cơ bản, và nó khá giống nhau với tất cả các ngôn ngữ. Các ứng dụng luôn xử lý dữ liệu ở đầu vào và xuất dữ liệu kết quả ở đầu ra. Đầu vào, […]

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Mã màu đỏ nhạt - màu đỏ nhạt trong html

By ads_php