欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)數(shù)組去除重復數(shù)據(jù)的方法詳解

 更新時間:2017年09月07日 10:14:18   作者:海岸線-haianxian  
這篇文章主要介紹了Java實現(xiàn)數(shù)組去除重復數(shù)據(jù)的方法,結合實例形式詳細分析了java數(shù)組去除重復的幾種常用方法、實現(xiàn)原理與相關注意事項,需要的朋友可以參考下

本文實例講述了Java實現(xiàn)數(shù)組去除重復數(shù)據(jù)的方法。分享給大家供大家參考,具體如下:

前一段時間被面試問到:如果一個數(shù)組中有重復元素,用什么方法可以去重?一時間會想到用一種方法,但是后來查閱資料后發(fā)現(xiàn),有好多方法可以實現(xiàn),現(xiàn)在就總結一下,比較簡單的幾種。

一.用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)內(nè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會調(diào)用該對象的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碼作為標識的,而具有相同內(nèi)容的 String對象,hashcode是一樣,所以放入的內(nèi)容不能重復。但是同一個類的對象可以放入不同的實例 。

PS:本站還有兩款比較簡單實用的在線文本去重復工具,推薦給大家使用:

在線去除重復項工具:
http://tools.jb51.net/code/quchong

在線文本去重復工具:
http://tools.jb51.net/aideddesign/txt_quchong

更多關于java相關內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)組操作技巧總結》、《Java字符與字符串操作技巧總結》、《Java數(shù)學運算技巧總結》、《Java數(shù)據(jù)結構與算法教程》及《Java操作DOM節(jié)點技巧總結

希望本文所述對大家java程序設計有所幫助。

相關文章

  • 一步步教你把SpringBoot項目打包成Docker鏡像

    一步步教你把SpringBoot項目打包成Docker鏡像

    Docker可以讓開發(fā)者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的 Linux 機器上,也可以實現(xiàn)虛擬化,下面這篇文章主要給大家介紹了關于SpringBoot項目打包成Docker鏡像的相關資料,需要的朋友可以參考下
    2023-02-02
  • Java消息隊列中的Kafka如何保證冪等性

    Java消息隊列中的Kafka如何保證冪等性

    這篇文章主要介紹了Java消息隊列中的Kafka如何保證冪等性,Kafka是一種消息隊列,主要用來處理大量數(shù)據(jù)狀態(tài)下的消息隊列,一般用來做日志的處理,既然是消息隊列,那么Kafka也就擁有消息隊列的相應的特性了,需要的朋友可以參考下
    2023-07-07
  • Mybatis逆工程jar包的修改和打包

    Mybatis逆工程jar包的修改和打包

    這篇文章主要介紹了Mybatis逆工程jar包的修改和打包的相關資料,需要的朋友可以參考下
    2016-06-06
  • Maven生命周期和及插件原理用法詳解

    Maven生命周期和及插件原理用法詳解

    這篇文章主要介紹了Maven生命周期和及插件原理用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值的相關資料
    2020-08-08
  • intelliJ idea 2023 配置Tomcat 8圖文教程

    intelliJ idea 2023 配置Tomcat 8圖文教程

    這篇文章主要介紹了intelliJ idea 2023 配置Tomcat 8教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • spring?boot實現(xiàn)圖片上傳到后臺的功能(瀏覽器可直接訪問)

    spring?boot實現(xiàn)圖片上傳到后臺的功能(瀏覽器可直接訪問)

    這篇文章主要介紹了spring?boot實現(xiàn)圖片上傳到后臺的功能(瀏覽器可直接訪問),需要的朋友可以參考下
    2022-04-04
  • Java編程關于子類重寫父類方法問題的理解

    Java編程關于子類重寫父類方法問題的理解

    這篇文章主要介紹了Java編程關于子類重寫父類方法問題的理解,分享了有關子類重寫父類的實例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 舉例解析Java的圖像緩沖技術的使用

    舉例解析Java的圖像緩沖技術的使用

    這篇文章主要介紹了Java的圖像緩沖技術的使用,使用到了Java的awt.image包,需要的朋友可以參考下
    2015-10-10
  • java中類加載與雙親委派機制詳解

    java中類加載與雙親委派機制詳解

    這篇文章主要介紹了java中類加載與雙親委派機制詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 如何通過Java實現(xiàn)時間軸過程解析

    如何通過Java實現(xiàn)時間軸過程解析

    這篇文章主要介紹了如何通過Java實現(xiàn)時間軸過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02

最新評論