Chuyển đến nội dung chính

Danh sách trong Scala

Tìm hiểu danh sách là gì và cách tận dụng chúng trong ngôn ngữ lập trình Scala.
Đã cập nhật 5 thg 10, 2026  · 6 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Bạn cũng có thể quan tâm đến các hướng dẫn sau:

Giới thiệu

Danh sách (kiểu dữ liệu trừu tượng)
Nguồn: Wikipedia - List (abstract data type)

Cấu trúc danh sách liên kết đơn, triển khai một danh sách với 3 phần tử số nguyên (Nguồn: Wikipedia - List (abstract data type)).

Nói chung, danh sách là một dãy các kiểu dữ liệu trừu tượng đại diện cho một số lượng giá trị cố định. Các giá trị có thể được thao tác bằng chương trình và cũng có thể xuất hiện nhiều hơn một lần trong một danh sách. Một ví dụ về danh sách được minh họa ở hình trên dưới dạng danh sách liên kết đơn gồm ba giá trị số nguyên. Danh sách cũng được xem là một cấu trúc dữ liệu, và một ví dụ như vậy của danh sách dưới dạng cấu trúc dữ liệu là danh sách liên kết.

Nhiều ngôn ngữ lập trình hỗ trợ danh sách, và một ví dụ nơi mọi người sử dụng danh sách rất nhiều là Python. Một danh sách thường có thể được tạo bằng cách viết các phần tử theo thứ tự, ngăn cách bằng dấu phẩy, chấm phẩy hoặc khoảng trắng, trong một cặp ký tự bao như ngoặc tròn (), ngoặc vuông [], ngoặc nhọn {}, hoặc ngoặc nhọn nhọn <>. Một số ngôn ngữ như Python có thể cho phép kiểu danh sách được đánh chỉ mục hoặc cắt lát giống như kiểu mảng; trong trường hợp đó kiểu dữ liệu được mô tả chính xác hơn là một mảng (Nguồn: Wikipedia - List (abstract data type)).

Riêng với Scala, danh sách là một collection chứa dữ liệu immutable, nghĩa là khi danh sách đã được tạo thì không thể thay đổi. Trong Scala, danh sách thể hiện một danh sách liên kết.

Trong danh sách Scala, mỗi phần tử không nhất thiết phải cùng kiểu dữ liệu. Việc triển khai danh sách Scala sử dụng trạng thái có thể thay đổi nội bộ trong giai đoạn khởi tạo. Trong Scala, danh sách được định nghĩa trong gói scala.collection.immutable và do đó chúng là bất biến. Cuối cùng, Scala List có nhiều phương thức như add, prepend, max, min, v.v.

Cú pháp định nghĩa một Scala List

val variable_name: List[type] = List(item1, item2, item3) hoặc val variable_name = List(item1, item2, item3) Một danh sách trong Scala nhìn chung giống một mảng Scala. Tuy nhiên, Scala List là bất biến và đại diện cho cấu trúc dữ liệu danh sách liên kết. Ngược lại, mảng Scala là phẳng và có thể thay đổi.

Hãy nhanh chóng hiểu sự khác biệt trên bằng một ví dụ.

Scala List so với Scala Array

Trước tiên, hãy định nghĩa một mảng trong Scala.

Sau đó bạn sẽ sửa đổi giá trị tại chỉ mục thứ 1 vì mảng Scala đánh chỉ mục từ 0 và xem liệu bạn có thể cập nhật nó không.

Mảng Scala

Như bạn có thể thấy từ đoạn mã trên, mảng Scala cho phép bạn sửa đổi giá trị tại chỉ mục thứ 1.

Bây giờ, bạn sẽ định nghĩa một Scala List và thử làm tương tự như trên.

Danh sách Scala

Từ ví dụ trên, bạn có thể kết luận rằng vì Scala List là bất biến, việc cập nhật giá trị đã dẫn đến lỗi.

Các phương thức của Scala List

  • head: Trả về phần tử đầu tiên của danh sách Scala.

  • tail: Trả về tất cả phần tử ngoại trừ phần tử đầu tiên.

  • isEmpty: Kiểm tra xem danh sách có rỗng hay không; nếu rỗng trả về True, ngược lại trả về False.

  • fill(): Tạo một danh sách đồng nhất gồm không hoặc nhiều bản sao của phần tử được chỉ định.

  • reverse: Đảo ngược các phần tử của danh sách.

  • $:::$ hoặc $.:::$ hoặc .concat(): Nối hai hoặc nhiều danh sách.

  • tabulate(): Có thể lập bảng một danh sách. Về tinh thần, nó giống phương thức fill(), nhưng khác ở chỗ nó nhận hai đối số. Đối số thứ nhất cho biết kích thước danh sách cần tạo, trong khi đối số thứ hai mô tả các phần tử của danh sách, được tính từ một hàm.

Đừng lo nếu một số phương thức trên chưa rõ ràng với bạn, vì bạn sẽ triển khai chúng trong Scala với ví dụ minh họa; nhưng trước đó hãy học cách định nghĩa Scala List.

Bạn sẽ tạo Scala List với các kiểu dữ liệu chuỗi, số nguyên (cả 1D & 2D). Bạn cũng sẽ học cách tạo một danh sách gồm cả chuỗi và số nguyên.

Danh sách số nguyên 1-D

Danh sách số nguyên 1-D

Danh sách 1-D gồm cả số nguyên và chuỗi

Danh sách 1-D gồm cả số nguyên và chuỗi

Danh sách chuỗi 1-D

Danh sách chuỗi 1-D

Danh sách 2-D

Danh sách 2-D

Phép toán số học trên danh sách

Trong ví dụ này, bạn sẽ sử dụng danh sách thay vì chỉ định nghĩa biến. Không giống biến, một List có thể chứa số lượng giá trị n; bạn sẽ thực hiện các phép toán số học trên hai danh sách thay vì hai biến.

Hãy cùng tìm hiểu nhanh cách thực hiện.

Để áp dụng các phép toán số học, bạn sẽ sử dụng hàm zipped.map theo sau là các danh sách x và y. Sau đó bạn sẽ chỉ định trong phương thức zipped.map phép toán muốn thực hiện như một đối số.

Phép toán số học trên danh sách
Phép toán số học trên danh sách

Cuối cùng, hãy viết một đoạn mã bao gồm tất cả các phương thức này.

object Scala_List_Methods
{

def main(args: Array[String])
{
    // define two lists
    val x = List(1, 40, 10)
    val y = List(20, 25, 30)
    val z = List("DataCamp", "Tutorials", "Are", "The", "Best")

    //Head
    println();
    println("Head of list x, y, z = " + (x.head, y.head, z.head));
    println();

    //Tail
    println("Tail of list x, y, z = " + (x.tail, y.tail, z.tail));
    println();

    //isEmpty
    println("Is list x, y, z empty? = " + (x.isEmpty, y.isEmpty, z.isEmpty));
    println();

    //Concatenate
    println("Concatenating x, y, z lists with the first method = " + (x:::y:::z));
    println("Concatenating x, y, z lists with the second method = " + ((x).:::(y).:::(z)));
    println("Concatenating x, y, z lists with the third method = " + (List.concat(x,y,z)));
    println();

    //Reverse
    println("Reverse of x, y, z is = " + (x.reverse, y.reverse, z.reverse));
    println();

    //Fill
    println("Output of Fill method is = " + (List.fill(5)(z)));
    println();

    //Tabulate
    println("Output of Tabulate method is = " + (List.tabulate(5)(x => x * x * x)));
}
}
Phép toán số học trên danh sách

Kết luận

Chúc mừng bạn đã hoàn thành hướng dẫn Scala này.

Vui lòng đặt câu hỏi liên quan đến hướng dẫn này trong phần bình luận bên dưới.

Chủ đề
Scala

Khóa học Scala

Khóa học

Introduction to Scala

3 giờ
27.2K
Begin your journey with Scala, a popular language for scalable applications and data engineering infrastructure.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm