Scala collection là một container mà giữ tập hợp các phần tử được sắp xếp theo thứ tự như là List, Set, Tuple, Option, Map…Collection có thể là strict hoặc lazy. Bộ nhớ sẽ không được cấp phép nếu chúng chưa được truy cập. Collection có thể là mutable hoặc immutable.
Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu về List
List
Các phần tử của List đều có cùng kiểu dữ liệu. List giống như là một array nhưng có 2 điểm khác đó là List có thể là một immutable và List miêu tả một danh sách nối tiếp trong khi array là phẳng, không thay đổi.
List được diễn tả bằng List[T], trong đó T là kiểu dữ liệu của các phần tử
Hãy cùng xem ví dụ sau
val StudentNames[String] = List("Rohan", "Andreas", "Rob", "John")
Có thể một List trống như sau
val em: List[Nothing] = List()
Có thể tạo một List 2 chiều như sau
val twodim: List[List[Int]] = List( List(1, 0, 0), List(0, 1, 0), List(0, 0, 1) )
Các hoạt động cơ bản
Các hoạt động cơ bản bao gồm
- head: trả về phần tử đầu tiên của List
- tail: Trả về tất cả các phần tử trừ phần tử đầu tiên
- isEmpty: Trả về true nếu list là trống
Hãy cùng xem ví dụ về những hoạt động này
object Student { def main(args:Array[String]) { val names= "Harry" :: ("Adam" :: ("Jill" :: Nil)) val age = Nil println( "Head of names array : " + names.head ) println( "Tail of names array : " + names.tail ) println( "Check if names is empty : " + names.isEmpty ) println( "Check if age is empty : " + age.isEmpty ) } }
Chúng ta đang tạo một student
object với 2 List là names
và age
. Chúng ta gọi các phương thức head, tail và isEmpty với names
và isEmpty với age
.
Để xem kết qủa bằng cách sử dụng câu lệnh Student.main(null)
và kết quả nhận được như sau
Head of names array : Harry Tail of names array : List(Adam, Jill) Check if names is empty : false Check if age is empty : true
Bạn cũng có thể chạy đoạn code ở trên trong file Student.scala
$scalac Student.scala $scala Student Head of names array : Harry Tail of names array : List(Adam, Jill) Check if names is empty : false Check if age is empty : true
Nối các List
Để nối các List chúng ta sử dụng :::
hoặc List().::::
hoặc phương thức concat
để nối 2 hoặc nhiều List
Hãy cùng xem ví dụ bên dưới đây
object Country { def main(args:Array[String]) { val country_1 = List("India","SriLanka","Algeria") val country_2 = List("Austria","Belgium","Canada") val country = country_1 ::: country_2 println( "country_1 ::: country_2 : " + country ) val cont = country_1.:::(country_2) println( "country_1.:::(country_2) : " + cont ) val con = List.concat(country_1, country_2) println( "List.concat(country_1, country_2) : " + con ) } }
Chúng ta tạo 2 List là country_1
và country_2
và nối lại với nhau thành country
sử dụng toán tử :::
. Trong trường hợp thứ 2, chúng ta sử dụng toán tử .:::
để nối country_1
và country_2
thành cont
và dữ liệu của list thứ 2 country_2
sẽ được chèn vào trước rồi mới đến dữ liệu của country_1
được hiện ra.
Cuối cùng chúng ta sử dụng phương thức concat để nối country_1
và country_2
thành con
Kết quả
country_1 ::: country_2 : List(India, SriLanka, Algeria, Austria, Belgium, Canada) country_1.:::(country_2) : List(Austria, Belgium, Canada, India, SriLanka, Algeria) List.concat(country_1, country_2) : List(India, SriLanka, Algeria, Austria, Belgium, Canada)
Reverse
Cấu trúc dữ liệu List cung cấp phương thức reverse để đảo ngược các phần tử của list
Hãy cùng xem ví dụ dưới đây
object Country { def main(args:Array[String]) { val country = List("Denmark","Sweden","France") println("Country List before reversal :" + country) println("Country List after reversal :" + country.reverse) } }
Ở đây chúng ta sử dụng phương thức reverse để đảo ngược các phần tử của country
Kết quả
Country List before reversal :List(Denmark, Sweden, France) Country List after reversal :List(France, Sweden, Denmark)
Tạo List giống nhau
Phương thức List.fill()
tạo 0 hoặc nhiều hơn copy của cùng một phần tử
Hãy cùng xem ví dụ bên dưới đây
object Student { def main(args: Array[String]) { val name = List.fill(6)("Rehan") println( "Name : " + name ) val id = List.fill(6)(12) println( "Id : " + id ) } }
Ở đây chúng ta sử dụng phương thức fill
và tạo một List name
với 6 phần tử có cùng một tên là “Rehan”. một list id
với 6 phần tử với cùng một giá trị là 12
Kết quả
Name : List(Rehan, Rehan, Rehan, Rehan, Rehan, Rehan) Id : List(12, 12, 12, 12, 12, 12)
Các phương thức
Sau đây là một số các phương thức được hỗ trợ trong List
- def distinct: List[X] → Tạo một List mới từ một List mà không có phần tử nào trùng nhau
- def indexOf(elem: X, from: Int): Int → Tìm index của giá trị xuất hiện đầu tiên trong List sau hoặc tại index bắt đầu.
- def length: Int → Trả về độ dài của List
- def sorted[Y >: X]: List[X] → Sắp xếp List theo thứ tự
- def sum: A → Tính tổng của tất cả các phần tử trong List này
- def toString(): String → Chuyển đổi List thành String
- def min: A → Tìm phần tử nhỏ nhất
- def max A → Tìm phần tử lớn nhất
- def lastIndexOf(elem: A, end: Int): Int → Tìm index của giá trị xuất hiện cuối cùng trước hoặc tại index cuối cùng
- def toMap[X, Y]: Map[X, Y] → Chuyển đổi List thành Map