Sự khác nhau giữa Set với Map trong java

Dưới đây là các câu hỏi phỏng vấn Java Collections thường gặp nhất kèm theo câu trả lời. Điều này sẽ giúp bạn giải mã các câu hỏi phỏng vấn tuyển tập vào năm 2021.

Show

1. Framework là gì?

Khung công tác là một kiến ​​trúc được xác định trước có chứa một tập hợp một số lớp và giao diện có thể được sử dụng trực tiếp mà không cần bất kỳ sửa đổi nào.

2. Khung Bộ sưu tập là gì?

Trong Java, tập hợp là một thực thể duy nhất đại diện cho một nhóm đối tượng và khung là một kiến ​​trúc được xác định có chứa các giao diện và lớp. Do đó, khung công tác Bộ sưu tập Java là một kiến ​​trúc xác định một định giao diện, lớp và thuật toán. Khung này có sẵn từ JDK 1.2. Nó cũng có thể thực hiện các hoạt động như tìm kiếm, chèn, sắp xếp, xóa, thao tác, v.v.

3. Lớp Collections là gì?

Collections là một lớp trong Java là một phần của gói java.util và chứa nhiều phương thức tĩnh khác nhau mà chúng ta có thể sử dụng để thực hiện các thao tác trên Collections. Nó cũng chứa các phương thức cho các thuật toán khác nhau như phân loại, tìm kiếm nhị phân, v.v.

4. Sự khác biệt giữa Mảng và Bộ sưu tập là gì?

MảngBộ sưu tập
Nó có kích thước cố định và không thể thay đổi kích thước trong thời gian chạyKích thước có thể được thay đổi động và không cố định.
Nó chỉ có thể lưu trữ cùng một loại dữ liệuNó có thể lưu trữ kết hợp các giá trị kiểu dữ liệu
Nó không có các phương thức tích hợp sẵn như sắp xếp hoặc tìm kiếmNó có các phương pháp tích hợp để sắp xếp và tìm kiếm
Hiệu suất nhanhHiệu suất chậm
Hiệu quả bộ nhớ kém hơnHiệu quả bộ nhớ cao hơn
Nó không được triển khai dựa trên bất kỳ cấu trúc dữ liệu nàoMọi lớp trong Bộ sưu tập được triển khai dựa trên một số cấu trúc dữ liệu

5. Các giao diện khác nhau hiện diện trong khuôn khổ Bộ sưu tập là gì?

Giao diện bộ sưu tập: Đây là giao diện gốc của hệ thống phân cấp khuôn khổ Bộ sưu tập. Các giao diện khác có mặt trong khuôn khổ Bộ sưu tập là giao diện Bản đồ và lặp lại. Các giao diện này còn có các giao diện con vì không có triển khai trực tiếp cho giao diện Bộ sưu tập.

Giao diện Bộ sưu tập chứa Danh sách, Đặt và Giao diện hàng đợi.

Giao diện danh sách: Đây là một tập hợp các phần tử có thứ tự cho phép lưu trữ các giá trị trùng lặp.

Đặt giao diện: Đây là một tập hợp các phần tử không có thứ tự và không cho phép các giá trị trùng lặp.

Giao diện hàng đợi: Nó thực hiện hàng đợi cấu trúc dữ liệu và tuân theo khái niệm FIFO (First-In-First-Out).

Giao diện Deque: Đây là hàng đợi kết thúc kép thực hiện cả ngăn xếp và hàng đợi và do đó hỗ trợ cả FIFO và LIFO.

Giao diện bản đồ: Nó lưu trữ dữ liệu dưới dạng các cặp khóa-giá trị và chúng tôi chỉ có thể lưu trữ các khóa duy nhất.

6. Sự khác biệt giữa ArrayList và Vector là gì?

Lập danh sáchvector
ArrayList không được đồng bộ hóaVectơ được đồng bộ hóa
Nó không phải là một lớp kế thừaNó là một lớp kế thừa
Nó có thể tăng kích thước lên 50% kích thước mảngNó có thể tăng kích thước của nó lên gấp đôi
Nó không an toàn theo luồngNó an toàn theo chủ đề
Chỉ sử dụng Iterator để duyệt quaSử dụng cả Enumeration và Iterator để duyệt qua
Hiệu suất ArrayList nhanh hơnHiệu suất vectơ tương đối chậm hơn

Câu hỏi phỏng vấn BankBazaar

7. Sự khác biệt giữa ArrayList và LinkedList là gì?

Lập danh sáchLinkedList
Sử dụng mảng động để lưu trữ các phần tửSử dụng Double LinkedList để lưu trữ các phần tử
Hiệu suất chậm hơnHiệu suất nhanh hơn
Nó chỉ có thể được sử dụng để triển khai Danh sáchNó có thể được sử dụng để triển khai Danh sách và Hàng đợi
Cung cấp quyền truy cập ngẫu nhiênKhông cung cấp quyền truy cập ngẫu nhiên
Chiếm ít bộ nhớ hơn vì nó chỉ lưu trữ đối tượngChiếm nhiều bộ nhớ hơn vì nó lưu trữ cả đối tượng và tham chiếu của đối tượng
get (int index) cho hiệu suất của O (1)get (int index) cho biết hiệu suất của O (n)
Hiệu suất hoạt động loại bỏ trong trường hợp xấu nhất là O (n) và trường hợp tốt nhất là O (1)Thao tác loại bỏ cho hiệu suất của O (1)
Phương thức Add cho biết hiệu suất của O (n) trong trường hợp xấu nhấtPhương thức Add cho hiệu suất của O (1)

8. Sự khác nhau giữa Iterator và ListIterator là gì?

Trình lặp lạiListIterator
Nó là một trình lặp phổ quátNó không phải là một trình lặp phổ quát
Nó có thể được sử dụng cho bất kỳ loại Bộ sưu tập nàoNó chỉ có thể được sử dụng cho các lớp triển khai Danh sách
Chỉ hỗ trợ thao tác đọc và xóaHỗ trợ các thao tác thêm, cập nhật, đọc và xóa.
Chỉ có thể được sử dụng để điều hướng phía trướcCó thể được sử dụng để điều hướng hướng tới và đảo ngược
Nó không phải là một trình lặp hai chiềuNó là một trình lặp hai chiều
Chúng tôi sử dụng phương thức iterator ()Chúng tôi sử dụng phương thức listiterator ().
Chúng tôi không thể chỉ định chỉ mục để lặp lạiChúng ta có thể chỉ định chỉ mục để lặp lại

9. Sự khác nhau giữa Iterator và Enumeration là gì?

ĐếmTrình lặp lại
Có sẵn từ JDK 1.0Có sẵn từ JDK 1.2
Nó không phải là một trình lặp phổ quátNó là một trình lặp phổ quát
Nó có thể được sử dụng để lặp lại chỉ các bộ sưu tập kế thừa như Vector, hashtableNó có thể được sử dụng để lặp lại bất kỳ Bộ sưu tập nào
Chỉ hỗ trợ hoạt động đọcHỗ trợ cả thao tác đọc và xóa
Nó có các tên phương thức dài dòng
Vd: hasMoreElements ()
Nó có tên phương thức ngắn
Vd: hasNext ()

10. Sự khác nhau giữa Danh sách và Tập hợp là gì?

Danh sáchThiết lập
Nó có thể lưu trữ các phần tử trùng lặpNó chỉ có thể lưu trữ các phần tử duy nhất
Nó là một bộ sưu tập được đặt hàngNó là một bộ sưu tập không có thứ tự
Nó có một lớp kế thừa duy nhất là VectorNó không có bất kỳ lớp kế thừa nào
Nó có thể lưu trữ bất kỳ số lượng giá trị null nàoNó chỉ có thể lưu trữ một giá trị rỗng duy nhất

11. Sự khác biệt giữa HashSet và TreeSet là gì?

TreeSetHashSet
Duy trì thứ tự tăng dầnKhông duy trì bất kỳ đơn hàng nào
Tính toán chậm hơnTính toán nhanh hơn
Chi phí thời gian là log (n)Chi phí thời gian là không đổi

12. Sự khác nhau giữa Set và Map?

Thiết lậpBản đồ
Đặt giá trị chỉ cửa hàngBản đồ lưu trữ các khóa và giá trị
Tập hợp có thể chứa các giá trị duy nhấtBản đồ có thể chứa các khóa duy nhất và các giá trị trùng lặp
Nó có thể chứa một giá trị rỗngNó có thể giữ một khóa null và nhiều giá trị null

13. Sự khác nhau giữa HashSet và HashMap?

HashSetBản đồ băm
Nó thực hiện giao diện ĐặtNó thực hiện giao diện Bản đồ
Nó chỉ lưu trữ các giá trịNó lưu trữ dữ liệu dưới dạng cặp khóa-giá trị
Nó không thể có các giá trị trùng lặpNó có thể chứa các giá trị trùng lặp với các khóa duy nhất
Nó chỉ có thể có một giá trị rỗngNó có thể giữ một khóa null với nhiều giá trị null

Câu hỏi phỏng vấn Capital One

14. Sự khác nhau giữa HashMap và TreeMap?

TreeMapBản đồ băm
Duy trì thứ tự tăng dầnKhông duy trì bất kỳ đơn hàng nào
Không thể chứa khóa rỗngCó thể chứa một khóa rỗng
Nó là một triển khai dựa trên cấu trúc câyNó là một triển khai dựa trên bảng băm
Nó không cho phép các giá trị rỗngNó cho phép nhiều giá trị null
Sắp xếp chậm hơnSắp xếp nhanh hơn
Sử dụng cấu trúc dữ liệu cây đỏ-đenNó sử dụng cấu trúc dữ liệu bảng băm

15. Sự khác nhau giữa HashMap và HashTable?

Bản đồ bămHashtable
Nó không được đồng bộ hóaNó được đồng bộ hóa
Nó không phải là chuỗi an toàn và không thể được chia sẻ giữa các chuỗiNó là chủ đề an toàn và có thể được chia sẻ giữa các chủ đề
Cho phép một khóa null và nhiều giá trị nullKhông cho phép khóa null và giá trị null
Được giới thiệu trong JDK 1.2Nó là một lớp kế thừa
Chúng tôi sử dụng Iterator để duyệt qua HashmapChúng tôi sử dụng Iterator hoặc Enumeration để duyệt qua Hashtable
Kế thừa lớp AbstractMapKế thừa lớp Từ điển
Tính toán nhanhTính toán chậm

16. Sự khác nhau giữa Bộ sưu tập và Bộ sưu tập?

bộ sưu tậpBộ sưu tập
Đây là một lớp họcĐây là một giao diện
Cung cấp các phương pháp sắp xếp, tìm kiếm và đồng bộ hóaCung cấp cấu trúc dữ liệu cho hàng đợi, danh sách, tập hợp
Cung cấp các phương thức tĩnh cho các hoạt động khác nhau trên Bộ sưu tậpCung cấp các phương pháp hỗ trợ cấu trúc dữ liệu

17. Sự khác nhau giữa So sánh và So sánh là gì?

So sánhSo sánh
Cung cấp nhiều loại trình tựCung cấp một loại trình tự
Nó có một phương thức được tạo sẵn có tên là so sánh ()Nó có một tên phương thức được tạo sẵn so sánhTo ()
Nó là một phần của gói java.utilNó là một phần của gói java.lang
Lớp thực tế không được sửa đổiLớp thực tế đang sửa đổi khi triển khai

18. BlockingQueue là gì?

BlockingQueue là một giao diện cung cấp sự đồng thời trong các hoạt động như chèn và xóa các phần tử. Điều này có nghĩa là nó chèn một phần tử bằng cách đợi cho đến khi hàng đợi có chỗ trống và xóa một phần tử bằng cách đợi cho đến khi hàng đợi không còn trống.

19. Ưu điểm của tệp Thuộc tính là gì?

Tệp thuộc tính là một tệp giúp thay đổi hoặc cập nhật tệp mà không cần phải biên dịch lại lớp java. Nó giúp quản lý dữ liệu và hữu ích khi thường xuyên cập nhật dữ liệu tệp.

20. Phương thức hashCode () là gì?

Phương thức hashCode () được sử dụng trong kỹ thuật băm trả về một số nguyên được sử dụng để lưu trữ các cặp khóa-giá trị. Nó được sử dụng trong các Bộ sưu tập như HashSet, HashMap, v.v. Nó trả về cùng một giá trị số nguyên khi cả hai khóa giống hệt nhau. Trong trường hợp cả hai đối tượng đều khác nhau, thì nó trả về một giá trị nguyên khác cho cả hai đối tượng.

Giải pháp Leetcode Ngày của năm

21. Tại sao chúng ta ghi đè phương thức equals ()?

Phương thức bằng sẽ kiểm tra xem hai đối tượng có bằng nhau hay không. Điều này hiện diện trong lớp Object và chúng ta cần ghi đè nó để kiểm tra sự bình đẳng.

22. Làm thế nào để đồng bộ hóa các phần tử Danh sách, Tập hợp và Bản đồ?

Chúng tôi có thể đồng bộ hóa các phần tử bằng cách sử dụng phương pháp đồng bộ hóa.

23. Ưu điểm của tập hợp chung là gì?

  • Nó không yêu cầu đánh máy
  • Nó kiểm tra trong thời gian biên dịch và là kiểu an toàn.
  • Đồng thời kiểm tra các lỗi trong thời gian biên dịch

24. Xung đột băm là gì và nó được xử lý như thế nào?

Xung đột băm là quá trình khi hai khóa khác nhau tạo ra cùng một giá trị số nguyên hoặc giá trị băm. Chúng ta có thể tránh xung đột băm bằng cách sử dụng 2 kỹ thuật dưới đây:

  • Chuỗi riêng biệt
  • Mở địa chỉ

25. Kích thước mặc định của hệ số tải trong băm là bao nhiêu?

Kích thước mặc định của hệ số tải là 0.75.

26. Không nhanh là gì?

Lỗi nhanh là một điều kiện trong đó trình lặp ném ConcurrentModificationException khi có một sửa đổi cấu trúc.

27. Sự khác biệt giữa Array và ArrayList là gì?

MảngLập danh sách
Nó có kích thước cố địnhNó có kích thước động
Nó là tĩnhNó là động
Nó có thể lưu trữ các giá trị và đối tượng nguyên thủyNó chỉ có thể lưu trữ các đối tượng

28. Sự khác biệt giữa độ dài của một mảng và kích thước của ArrayList?

Chúng ta có thể truy xuất độ dài của một mảng bằng cách sử dụng thuộc tính length cho một mảng. Nhưng ArrayList không hỗ trợ điều này. Do đó, nó sử dụng phương thức size () để tìm kích thước của ArrayList. Cả hai đều trả về số phần tử trong một mảng hoặc ArrayList.

29. Làm thế nào để chuyển một mảng thành ArrayList và ngược lại?

Chúng ta có thể sử dụng phương thức asList () để chuyển đổi một mảng đến Lập danh sách và chúng ta có thể sử dụng phương thức toArray () để chuyển ArrayList thành một mảng.

30. Làm thế nào để đặt Java ArrayList ở dạng chỉ đọc?

Khi ArrayList ở chế độ chỉ đọc, chúng ta chỉ có thể đọc các giá trị và không thể sửa đổi hoặc cập nhật nó. Chúng ta có thể làm điều này bằng cách sử dụng phương thức Collections.unmodifiableCollection ().

31. Làm thế nào chúng ta có thể loại bỏ các bản sao khỏi ArrayList?

Chúng ta có thể Loại bỏ các bản sao từ ArrayList bằng cách sử dụng HashSet hoặc LinkedHashSet.

32. Các tính năng mới của Collections trong Java 8 là gì?

  • Hỗ trợ Java Stream API
  • Nhiều phương thức mới để cải tiến như forEachRemaining () trong Iterator, các phương thức ReplaceAll (), compute () và merge () trong Map.
  • Mở rộng giao diện Iterable với phương thức mặc định forEach ().

33. Tại sao giao diện Bản đồ không mở rộng giao diện Bộ sưu tập?

Giao diện Bản đồ thể hiện dữ liệu dưới dạng các cặp khóa-giá trị trong khi Bộ sưu tập không hỗ trợ điều này. Do đó, giao diện Bản đồ không thể được coi là một Bộ sưu tập và do đó không phải là một phần của khung Bộ sưu tập.

34. Một Iterator là gì?

Một Iterator là một giao diện có phương thức iterator () giúp chúng ta lặp lại hoặc duyệt qua tất cả các phần tử trong Bộ sưu tập.

35. Các cách khác nhau để lặp qua một danh sách là gì?

Chúng ta có thể lặp lại danh sách theo hai cách khác nhau:

  • Sử dụng vòng lặp for-each
  • Sử dụng trình lặp

36. Các chế độ xem Bộ sưu tập khác nhau được cung cấp bởi giao diện Bản đồ là gì?

Giao diện Bản đồ cung cấp các chế độ xem Bộ sưu tập bên dưới:

  • bộ chìa khoá(): Phương thức này trả về dạng xem Tập hợp của các phần tử.
  • giá trị (): Phương thức này trả về một Bộ sưu tập các giá trị trong bản đồ.
  • entrySet (): Phương thức này trả về dạng xem Tập hợp của ánh xạ cặp khóa-giá trị có trong bản đồ.

37. Lớp Collection nào cung cấp quyền truy cập ngẫu nhiên vào các phần tử?

Các lớp ArrayList, HashMap, TreeMap, HashTable và Vector.

38. EnumSet là gì?

EnumSet lưu trữ Enumeration loai du lieu và thực hiện giao diện Đặt. Tất cả các phần tử phải thuộc về kiểu Enum duy nhất và không cho phép lưu trữ các giá trị null.

39. Các lớp Collection nào là an toàn cho luồng?

Các lớp Vector, Hashtable, Properties và Stack.

40. Làm thế nào chúng ta có thể sắp xếp một danh sách các Đối tượng?

Chúng ta có thể sắp xếp danh sách các Đối tượng bằng cách sử dụng Arrays.sort () hoặc Collections.sort ()

41. Tại sao Collection không mở rộng giao diện Cloneable và Serializable?

Giao diện Bộ sưu tập chứa các phần tử không là gì khác ngoài một nhóm các đối tượng. Thứ tự của các phần tử dựa trên việc triển khai giao diện Bộ sưu tập. Do đó, không bắt buộc phải mở rộng giao diện Có thể sao chép và Có thể nối tiếp.

42. Làm thế nào để đảo ngược một danh sách?

Chúng ta có thể sử dụng phương thức reverse () để đảo ngược các phần tử trong danh sách.

import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; public class ArrayListReverse { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add(30); al.add(10); al.add(50); al.add(40); al.add(20); System.out.println("Elements in the ArrayList"); System.out.println(al); System.out.println("

Sắp xếp các phần tử

in descending order:"); Collections.reverse(al); System.out.println(al); } } Elements in the ArrayList [30, 10, 50, 40, 20] Sort Elements in descending order: [20, 40, 50, 10, 30]

43. Java hỗ trợ bao nhiêu loại LinkedList?

LinkedList trong Java hỗ trợ hai loại: Single LinkedList, Double LinkedList

44. Tập hợp là gì và các cách triển khai khác nhau là gì?

Một Tập hợp là tập hợp các phần tử không có thứ tự, có nghĩa là nó không duy trì bất kỳ thứ tự chèn nào và không thể lưu trữ bất kỳ giá trị trùng lặp nào.

HashSet, LinkedHashSet và TreeSet là các lớp triển khai giao diện Set.

45. Một voidSet () là gì?

Một voidSet () trả về tập bất biến trống bất cứ khi nào chúng ta cố gắng loại bỏ các phần tử null. Bộ này có thể nối tiếp.

46. ​​Vector là gì?

Một vectơ tương tự như mảng nhưng là một phần của khuôn khổ kế thừa và có các phương thức riêng biệt ngoài khuôn khổ Bộ sưu tập.

47. Lớp từ điển là gì?

Một lớp từ điển có thể lưu trữ các cặp khóa-giá trị.

48. Một ngoại lệ không được hỗ trợOperationException là gì?

Ngoại lệ UnsupportedOperationException được ném khi phương thức này không được hỗ trợ bởi loại Bộ sưu tập.

49. Phương thức peek () trong Queue là gì?

Phương thức peek () trả về phần tử head nhưng không loại bỏ nó. Nếu hàng đợi trống thì nó trả về null.

50. Các phương pháp hay nhất trong khuôn khổ Bộ sưu tập là gì?

  • Chọn đúng loại bộ sưu tập dựa trên yêu cầu
  • Tránh tạo lại hoặc thay đổi kích thước
  • Sử dụng nhiều giao diện hơn
  • Sử dụng generic để đảm bảo an toàn cho loại hình
  • Nâng cao khả năng tái sử dụng mã bằng cách sử dụng lớp tiện ích Bộ sưu tập
  • Sử dụng các lớp bất biến

Hợp nhất các mảng đã sắp xếp Giải pháp Leetcode

51. Các loại hàng đợi khác nhau là gì?

  • Hàng đợi ưu tiên
  • Hàng đợi hai đầu (deque)
  • Hàng đợi vòng tròn

52. Sự khác nhau giữa ngăn xếp và hàng đợi?

Sắp xếpHàng đợi
Thực hiện theo khái niệm LIFOTuân theo khái niệm FIFO
Thực hiện thao tác chèn hoặc xóa thông qua một đầuThực hiện chèn qua một đầu và xóa qua đầu kia
Sử dụng một con trỏ duy nhấtSử dụng con trỏ kép
Không có loại biến thểCó các biến thể như PriorityQueue, CircularQueue, Double-end Queue

53. Sự khác nhau giữa mảng và ngăn xếp?

MảngSắp xếp
Lưu trữ các phần tử của cùng một kiểu dữ liệuLưu trữ các phần tử của các kiểu dữ liệu khác nhau
Chúng tôi có thể sử dụng thao tác truy cập ngẫu nhiên để xóa hoặc thêm các phần tửChúng ta có thể sử dụng khái niệm LIFO để thêm hoặc bớt các phần tử
Xác định các yếu tố dựa trên chỉ sốĐược sử dụng cho các hoạt động đẩy và bật

54. Ưu điểm của ngăn xếp là gì?

  • Sử dụng khái niệm LIFO để quản lý dữ liệu
  • Tự động làm sạch đối tượng
  • Cấp phát bộ nhớ và quản lý phân bổ giao dịch dễ dàng hơn
  • Sử dụng ngăn xếp khi biến không được sử dụng bên ngoài hàm
  • Không dễ dàng bị hỏng

55. Ký hiệu Big-O là gì?

Ký hiệu Big-O là để tính toán hiệu suất của thuật toán dựa trên số lượng phần tử. Chúng tôi có thể sử dụng điều này để so sánh và kiểm tra loại bộ sưu tập nào có thể thích ứng để triển khai.

Ví dụ: phương thức getIndex (index i) của ArrayList thực hiện thời gian không đổi và không phụ thuộc vào số phần tử. Do đó ký hiệu Big-O là O (1).

56. LinkedList là gì?

LinkedList là một lớp triển khai cả deque và List bằng cách sử dụng liên kết kép danh sách. Mỗi phần tử là một nút có 2 phần, một phần lưu trữ giá trị và phần còn lại lưu trữ tham chiếu địa chỉ của các nút trước và sau.

57. Map.entry trong Bản đồ là gì?

Map.entry là giao diện hỗ trợ làm việc với mục nhập bản đồ. Nó trả về một chế độ xem của bộ sưu tập. Chúng ta có thể sử dụng phương thức entrySet () để truy xuất dạng xem tập hợp của bản đồ có các cặp khóa-giá trị. Nó cũng có các phương thức riêng biệt như getKey () để lấy khóa và getValue () để lấy giá trị.

58. Các phương pháp khác nhau để xóa các phần tử khỏi ArrayList là gì?

  • clear (): Loại bỏ tất cả các phần tử và làm trống ArrayList
  • remove (int index): Loại bỏ phần tử tại chỉ mục được chỉ định
  • remove (Object o): Loại bỏ phần tử được chỉ định
  • removeAll (): Loại bỏ tất cả các phần tử trong danh sách
  • removeIf (Bộ lọc vị từ): Loại bỏ các phần tử thỏa mãn vị từ

59. Làm thế nào để tham gia nhiều ArrayList?

Chúng ta có thể nối hoặc hợp nhất các phần tử của ArrayList khác nhau bằng phương thức addAll (Collection c).

ArrayList al = new ArrayList(); ArrayList arr = new ArrayList(); al.addAll(arr);

60. Toán tử kim cương là gì?

Toán tử kim cương hỗ trợ để truy xuất các kiểu đối số của lớp chung. Nó được biểu diễn dưới dạng <> và có thể thay thế hàm tạo được tham số hóa bằng các tập tham số trống.