01/10/2018, 17:14

Lấy các phần tử không trùng nhau trong mảng

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 ạ.

HK boy viết 19:18 ngày 01/10/2018

Không liên quan đến Java nhưng

hàm set() để lấy ra các giá trị trong list không lặp

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:

GeeksforGeeks – 15 Sep 14

Print All Distinct Elements of a given integer array - GeeksforGeeks

Given an integer array, print all distinct elements in array. The given array may contain duplicates and the output should print every element only once.… Read More »

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:

VietTuts

HashSet trong java - VietTuts

Lớp HashSet trong java được sử dụng để tạo một bộ sưu tập sử dụng bảng băm để lưu trữ. HashSet chỉ chứa các phần tử duy nhất Sự khác nhau giữa List và Set.

Thùy Linh viết 19:28 ngày 01/10/2018

Vâng, cảm ơn ạ,

Nguyễn Đình Anh viết 19:23 ngày 01/10/2018

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 trong ArrayList arr .
  • arr.lastIndexOf(i) sẽ trả về vị trí cuối cùng của phần tử i trong ArrayList 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é

Hung viết 19:21 ngày 01/10/2018

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

public TreeSet(Collection<? extends E> c)

Constructs a new tree set containing the elements in the specified collection, sorted according to the natural ordering of its elements. All elements inserted into the set must implement the Comparable interface. Furthermore, all such elements must be mutually comparable: e1.compareTo(e2) must not throw a ClassCastException for any elements e1 and e2 in the set.

Parameters:

  • c - collection whose elements will comprise the new set

Throws:

  • ClassCastException - if the elements in c are not Comparable, or are not mutually comparable
  • NullPointerException - if the specified collection is null

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
Thùy Linh viết 19:17 ngày 01/10/2018

vâng, cảm ơn ạ, mk làm được r ạ,

Thùy Linh viết 19:27 ngày 01/10/2018

vâng, cảm ơn ạ, mk làm được r ạ

Nguyen Kien viết 19:30 ngày 01/10/2018

Theo mình thì tạo List trước sau đó chuyển List thành Set là ok à

stackoverflow.com
OHHAI

Easiest way to convert a List to a Set in Java

java, collections
asked by OHHAI on 10:02PM - 15 Sep 09

Bài liên quan
0