您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關數(shù)組中的重復數(shù)據(jù)怎么利用Java去除,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據(jù)這篇文章可以有所收獲。
一.用List集合實現(xiàn)
int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer>(); for (int i=0; i<str.length; i++) { if(!list.contains(str[i])) { list.add(str[i]); } } System.out.println("去除重復后的list集合"+list);
輸出結果是:
去除重復后的list集合[5, 6, 8, 7, 4]
可以看到可以去除重復的元素,但是沒有實現(xiàn)排序功能。
二.用hashSet或者TreeSet實現(xiàn)
Integer[] nums = { 5, 5, 6, 6, 6, 8, 8, 7, 11, 12, 12 }; // HashSet hset = new HashSet(Arrays.asList(nums)); TreeSet<Integer> hset = new TreeSet<Integer>(Arrays.asList(nums)); Iterator i = hset.iterator(); while(i.hasNext()){ System.out.println(i.next()); }
輸出結果:
5 6 7 8 11 12
可以看到不僅去除了重復數(shù)據(jù),而且將數(shù)據(jù)進行了排序。
其中Arrays.asList()
是將一個數(shù)組轉化為一個List對象,這個方法會返回一個ArrayList類型的對象, 這個ArrayList類并非java.util.ArrayList類,而是Arrays類的靜態(tài)內部類!
TreeSet不僅可以使元素不重復,而且可以實現(xiàn)排序等功能的集合,它在對象元素添加到集合中時會自動按照某種比較規(guī)則將其插入到有序的對象序列中。
三.用List和set實現(xiàn)
int[] nums = { 5, 6, 6, 6, 8, 8, 7 }; List<Integer> numList = new ArrayList<Integer>(); for (int i : nums) numList.add(i); Set<Integer> numSet = new HashSet<Integer>(); numSet.addAll(numList); System.out.println(numSet);
輸出結果:
[5, 6, 7, 8]
可以看出,也是去掉重復的數(shù)據(jù),并且實現(xiàn)了排序。
我們來做一個HashSet和TreeSet的比較:
HashSet
HashSet有以下特點
1) 不能保證元素的排列順序,順序有可能發(fā)生變化
2) 不是同步的
3) 集合元素可以是null,但只能放入一個null
當向HashSet集合中存入一個元素時,HashSet會調用該對象的hashCode()方法來得到該對象的hashCode值,然后根據(jù) hashCode值來決定該對象在HashSet中存儲位置。
簡單的說,HashSet集合判斷兩個元素相等的標準是兩個對象通過equals方法比較相等,并且兩個對象的hashCode()方法返回值相等
注意,如果要把一個對象放入HashSet中,重寫該對象對應類的equals方法,也應該重寫其hashCode()方法。其規(guī)則是如果兩個對 象通過equals方法比較返回true時,其hashCode也應該相同。另外,對象中用作equals比較標準的屬性,都應該用來計算 hashCode的值。
TreeSet類
TreeSet是SortedSet接口的唯一實現(xiàn)類,TreeSet可以確保集合元素處于排序狀態(tài)。TreeSet支持兩種排序方式,自然排序 和定制排序,其中自然排序為默認的排序方式。向TreeSet中加入的應該是同一個類的對象。
TreeSet判斷兩個對象不相等的方式是兩個對象通過equals方法返回false,或者通過CompareTo方法比較沒有返回0
自然排序
自然排序使用要排序元素的CompareTo(Object obj)方法來比較元素之間大小關系,然后將元素按照升序排列。
Java提供了一個Comparable接口,該接口里定義了一個compareTo(Object obj)方法,該方法返回一個整數(shù)值,實現(xiàn)了該接口的對象就可以比較大小。
obj1.compareTo(obj2)方法如果返回0,則說明被比較的兩個對象相等,如果返回一個正數(shù),則表明obj1大于obj2,如果是 負數(shù),則表明obj1小于obj2。
如果我們將兩個對象的equals方法總是返回true,則這兩個對象的compareTo方法返回應該返回0
定制排序
自然排序是根據(jù)集合元素的大小,以升序排列,如果要定制排序,應該使用Comparator接口,實現(xiàn) int compare(T o1,T o2)方法。
最重要:
1、TreeSet 是二差樹實現(xiàn)的,Treeset中的數(shù)據(jù)是自動排好序的,不允許放入null值。
2、HashSet 是哈希表實現(xiàn)的,HashSet中的數(shù)據(jù)是無序的,可以放入null,但只能放入一個null,兩者中的值都不能重復,就如數(shù)據(jù)庫中唯一約束。
3、HashSet要求放入的對象必須實現(xiàn)HashCode()方法,放入的對象,是以hashcode碼作為標識的,而具有相同內容的 String對象,hashcode是一樣,所以放入的內容不能重復。但是同一個類的對象可以放入不同的實例 。
看完上述內容,你們對數(shù)組中的重復數(shù)據(jù)怎么利用Java去除有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。