最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

一.用List集合實(shí)現(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("去除重復(fù)后的list集合"+list);

輸出結(jié)果是:

去除重復(fù)后的list集合[5, 6, 8, 7, 4]

可以看到可以去除重復(fù)的元素,但是沒有實(shí)現(xiàn)排序功能。

二.用hashSet或者TreeSet實(shí)現(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());
}

輸出結(jié)果:

5 6 7 8 11 12

可以看到不僅去除了重復(fù)數(shù)據(jù),而且將數(shù)據(jù)進(jìn)行了排序。

其中Arrays.asList()是將一個(gè)數(shù)組轉(zhuǎn)化為一個(gè)List對(duì)象,這個(gè)方法會(huì)返回一個(gè)ArrayList類型的對(duì)象, 這個(gè)ArrayList類并非java.util.ArrayList類,而是Arrays類的靜態(tài)內(nèi)部類!

TreeSet不僅可以使元素不重復(fù),而且可以實(shí)現(xiàn)排序等功能的集合,它在對(duì)象元素添加到集合中時(shí)會(huì)自動(dòng)按照某種比較規(guī)則將其插入到有序的對(duì)象序列中。

三.用List和set實(shí)現(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);

輸出結(jié)果:

[5, 6, 7, 8]

可以看出,也是去掉重復(fù)的數(shù)據(jù),并且實(shí)現(xiàn)了排序。

我們來做一個(gè)HashSet和TreeSet的比較:

HashSet

HashSet有以下特點(diǎn)

1) 不能保證元素的排列順序,順序有可能發(fā)生變化
2) 不是同步的
3) 集合元素可以是null,但只能放入一個(gè)null

當(dāng)向HashSet集合中存入一個(gè)元素時(shí),HashSet會(huì)調(diào)用該對(duì)象的hashCode()方法來得到該對(duì)象的hashCode值,然后根據(jù) hashCode值來決定該對(duì)象在HashSet中存儲(chǔ)位置。

簡(jiǎn)單的說,HashSet集合判斷兩個(gè)元素相等的標(biāo)準(zhǔn)是兩個(gè)對(duì)象通過equals方法比較相等,并且兩個(gè)對(duì)象的hashCode()方法返回值相等

注意,如果要把一個(gè)對(duì)象放入HashSet中,重寫該對(duì)象對(duì)應(yīng)類的equals方法,也應(yīng)該重寫其hashCode()方法。其規(guī)則是如果兩個(gè)對(duì) 象通過equals方法比較返回true時(shí),其hashCode也應(yīng)該相同。另外,對(duì)象中用作equals比較標(biāo)準(zhǔn)的屬性,都應(yīng)該用來計(jì)算 hashCode的值。

TreeSet類

TreeSet是SortedSet接口的唯一實(shí)現(xiàn)類,TreeSet可以確保集合元素處于排序狀態(tài)。TreeSet支持兩種排序方式,自然排序 和定制排序,其中自然排序?yàn)槟J(rèn)的排序方式。向TreeSet中加入的應(yīng)該是同一個(gè)類的對(duì)象。

TreeSet判斷兩個(gè)對(duì)象不相等的方式是兩個(gè)對(duì)象通過equals方法返回false,或者通過CompareTo方法比較沒有返回0

自然排序

自然排序使用要排序元素的CompareTo(Object obj)方法來比較元素之間大小關(guān)系,然后將元素按照升序排列。

Java提供了一個(gè)Comparable接口,該接口里定義了一個(gè)compareTo(Object obj)方法,該方法返回一個(gè)整數(shù)值,實(shí)現(xiàn)了該接口的對(duì)象就可以比較大小。

obj1.compareTo(obj2)方法如果返回0,則說明被比較的兩個(gè)對(duì)象相等,如果返回一個(gè)正數(shù),則表明obj1大于obj2,如果是 負(fù)數(shù),則表明obj1小于obj2。

如果我們將兩個(gè)對(duì)象的equals方法總是返回true,則這兩個(gè)對(duì)象的compareTo方法返回應(yīng)該返回0

定制排序

自然排序是根據(jù)集合元素的大小,以升序排列,如果要定制排序,應(yīng)該使用Comparator接口,實(shí)現(xiàn) int compare(T o1,T o2)方法。

最重要:

1、TreeSet 是二差樹實(shí)現(xiàn)的,Treeset中的數(shù)據(jù)是自動(dòng)排好序的,不允許放入null值。

2、HashSet 是哈希表實(shí)現(xiàn)的,HashSet中的數(shù)據(jù)是無序的,可以放入null,但只能放入一個(gè)null,兩者中的值都不能重復(fù),就如數(shù)據(jù)庫中唯一約束。

3、HashSet要求放入的對(duì)象必須實(shí)現(xiàn)HashCode()方法,放入的對(duì)象,是以hashcode碼作為標(biāo)識(shí)的,而具有相同內(nèi)容的 String對(duì)象,hashcode是一樣,所以放入的內(nèi)容不能重復(fù)。但是同一個(gè)類的對(duì)象可以放入不同的實(shí)例 。

PS:本站還有兩款比較簡(jiǎn)單實(shí)用的在線文本去重復(fù)工具,推薦給大家使用:

在線去除重復(fù)項(xiàng)工具:
http://tools.jb51.net/code/quchong

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

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

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JDK8 new ReentrantLock((true)加鎖流程

    JDK8 new ReentrantLock((true)加鎖流程

    這篇文章主要介紹了java面試中常遇到的問題JDK8 new ReentrantLock((true)加鎖流程示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • MyBatis-Plus插件機(jī)制及通用Service新功能

    MyBatis-Plus插件機(jī)制及通用Service新功能

    這篇文章主要介紹了MyBatis-Plus插件機(jī)制以及通用Service、新功能,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Java文件過濾器實(shí)現(xiàn)按條件篩選文件

    Java文件過濾器實(shí)現(xiàn)按條件篩選文件

    本文主要介紹了Java文件過濾器實(shí)現(xiàn)按條件篩選文件,文件過濾器是在文件處理中起到重要作用的工具,它可以用來篩選文件并根據(jù)特定的條件進(jìn)行過濾,下面就來介紹一下
    2024-04-04
  • 詳解Kotlin中的變量和方法

    詳解Kotlin中的變量和方法

    這篇文章主要介紹了詳解Kotlin中的變量和方法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 使用Java找出兩個(gè)List中的重復(fù)元素三種方法

    使用Java找出兩個(gè)List中的重復(fù)元素三種方法

    在Java編程中,我們經(jīng)常需要找出兩個(gè)列表(List)中的重復(fù)元素,在本文中,我們將探討三種方法來實(shí)現(xiàn)這一目標(biāo),需要的朋友可以參考下
    2023-10-10
  • java線程并發(fā)控制同步工具CountDownLatch

    java線程并發(fā)控制同步工具CountDownLatch

    這篇文章主要為大家介紹了java線程并發(fā)控制同步工具CountDownLatch使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • SpringBoot中@ConfigurationProperties實(shí)現(xiàn)配置自動(dòng)綁定的方法

    SpringBoot中@ConfigurationProperties實(shí)現(xiàn)配置自動(dòng)綁定的方法

    本文主要介紹了SpringBoot中@ConfigurationProperties實(shí)現(xiàn)配置自動(dòng)綁定的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • spring framework源碼調(diào)試技巧

    spring framework源碼調(diào)試技巧

    這篇文章給大家介紹了spring-framework源碼調(diào)試方法,可以直接將最新代碼clone到本地,如果想在代碼做一些注釋,也可以Fork到自己的倉庫。本文采用Fork的方式,并添加了測(cè)試module,感興趣的朋友一起看看吧
    2021-10-10
  • JSP代碼實(shí)現(xiàn) 金字塔(倒置)示例

    JSP代碼實(shí)現(xiàn) 金字塔(倒置)示例

    這篇文章主要介紹了JSP代碼實(shí)現(xiàn) 金字塔(倒置)示例,需要的朋友可以參考下
    2014-02-02
  • 基于Mybatis的配置文件入門必看篇

    基于Mybatis的配置文件入門必看篇

    這篇文章主要介紹了Mybatis的配置文件入門,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

黔东| 宣威市| 陇南市| 德格县| 县级市| 青浦区| 翁源县| 集贤县| 鄢陵县| 永安市| 班玛县| 宝应县| 利辛县| 鄂托克前旗| 光山县| 两当县| 泗阳县| 安平县| 中宁县| 青神县| 利辛县| 乐平市| 岢岚县| 团风县| 霸州市| 禹州市| 雷山县| 宽甸| 新竹县| 尉氏县| 安陆市| 万山特区| 靖宇县| 印江| 乌兰县| 甘孜县| 巨鹿县| 晋中市| 湖州市| 曲阜市| 胶州市|