Anh chị cho e hỏi với a, trong python có hàm set() để lấy ra các giá trị trong list không lặp thì trong java có hàm nào thực hiện chức năng tương tự không ạ?
em cảm ơn trước ạ.
Lấy các phần tử không trùng nhau trong mảng
Không liên quan đến Java nhưng
bạn đang hiểu sai rồi.
https://docs.python.org/3/library/functions.html#func-set
class
set([iterable])
Return a new set object, optionally with elements taken from iterable.
Trả về 1 object set, với element lấy ra từ iterable
. iterable
không nhất thiết phải là list.
>>> set((1, 2, 3, 4, 4, 3, 2, 5)) # tuple
{1, 2, 3, 4, 5}
>>> set(1, 2, 3, 4, 4, 3, 2, 5)
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
set(1, 2, 3, 4, 4, 3, 2, 5)
TypeError: set expected at most 1 arguments, got 8
>>> set({1, 2, 3, 4, 4, 3, 2, 5}) # set
{1, 2, 3, 4, 5}
>>> set([1, 2, 3, 4, 4, 3, 2, 5]) # list
{1, 2, 3, 4, 5}
>>> set(x % 7 for x in range(1, 9)) # comprehension
{0, 1, 2, 3, 4, 5, 6}
Vậy set object là cái gì?
https://docs.python.org/3/library/stdtypes.html#types-set
A set object is an unordered collection of distinct hashable objects.
Một thứ gì đó chứa các object hash được và phân biệt.
Như trong các ví dụ trên, kết quả trả về là 1 set object chứa các giá trị phân biệt trong các iterator nạp vào.
Thấy có distinct, hashable, thử search google qua 1 vòng:
Kết quả: Tống hết array vào HashSet<>
. Tất cả những phần tử trong HashSet là các phần tử phân biệt của array.
Demo xem ở link trên.
Xem link dưới để biết cụ thể hơn về HashMap:
Vâng, cảm ơn ạ,
Không có bạn ạ Nhưng chúng ta có thể tự tạo một hàm để làm điều đó
Giả sử mình có một ArrayList<Integer> arr
thì chúng ta có thể dùng cách này để tìm phần tử không trùng:
for(int i : arr)
{
if(arr.indexOf(i) == arr.lastIndexOf(i))
{
// Bạn muốn làm gì ở đây thì làm :)
}
}
Giải thích:
-
arr.indexOf(i)
sẽ trả về vị trí đầu tiên của phần tử i trongArrayList arr
. -
arr.lastIndexOf(i)
sẽ trả về vị trí cuối cùng của phần tử i trongArrayList arr
.
Vậy thì nếu arr.indexOf(i) == arr.lastIndexOf(i)
thì có phải là vị trí đầu tiên trùng với vị trí cuối cùng ==> Phần tử đó chỉ xuất hiện 1 lần trong ArrayList arr
P/s: Cách của mình phải sử dụng ArrayList
. Nếu bạn muốn dùng cho int[]
thì sẽ phải chạy thêm vòng for để add phần tử vào ArrayList
nhé
Bỏ collection vào constructor của Set
, tuỳ vào constructor dùng interface Comparable
hay interface Comparator
để hiện thực
Constructor của TreeSet
, lấy từ JavaDocs
https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html
Danh sách vài class implement interface Collection
AbstractCollection
-
AbstractList
ArrayList
Vector
AbstractQueue
-
AbstractSet
EnumSet
HashSet
TreeSet
vâng, cảm ơn ạ, mk làm được r ạ,
vâng, cảm ơn ạ, mk làm được r ạ
Theo mình thì tạo List trước sau đó chuyển List thành Set là ok à