1. 程式人生 > >JAVA陣列去除重複資料

JAVA陣列去除重複資料

前一段時間被面試問到:如果一個數組中有重複元素,用什麼方法可以去重?一時間會想到用一種方法,但是後來查閱資料後發現,有好多方法可以實現,現在就總結一下,比較簡單的幾種。

一.用List集合實現

    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]
可以看到可以去除重複的元素,但是沒有實現排序功能。

二.用hashSet或者TreeSet實現

    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
可以看到不僅去除了重複資料,而且將資料進行了排序。
其中Arrays.asList()是將一個數組轉化為一個List物件,這個方法會返回一個ArrayList型別的物件, 這個ArrayList類並非java.util.ArrayList類,而是Arrays類的靜態內部類!

TreeSet不僅可以使元素不重複,而且可以實現排序等功能的集合,它在物件元素新增到集合中時會自動按照某種比較規則將其插入到有序的物件序列中。

三.用List和set實現

      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]
可以看出,也是去掉重複的資料,並且實現了排序。

我們來做一個HashSet和TreeSet的比較:
HashSet
HashSet有以下特點
1) 不能保證元素的排列順序,順序有可能發生變化
2) 不是同步的
3) 集合元素可以是null,但只能放入一個null
當向HashSet集合中存入一個元素時,HashSet會呼叫該物件的hashCode()方法來得到該物件的hashCode值,然後根據 hashCode值來決定該物件在HashSet中儲存位置。
簡單的說,HashSet集合判斷兩個元素相等的標準是兩個物件通過equals方法比較相等,並且兩個物件的hashCode()方法返回值相 等
注意,如果要把一個物件放入HashSet中,重寫該物件對應類的equals方法,也應該重寫其hashCode()方法。其規則是如果兩個對 象通過equals方法比較返回true時,其hashCode也應該相同。另外,物件中用作equals比較標準的屬性,都應該用來計算 hashCode的值。

TreeSet類
TreeSet是SortedSet介面的唯一實現類,TreeSet可以確保集合元素處於排序狀態。TreeSet支援兩種排序方式,自然排序 和定製排序,其中自然排序為預設的排序方式。向TreeSet中加入的應該是同一個類的物件。
TreeSet判斷兩個物件不相等的方式是兩個物件通過equals方法返回false,或者通過CompareTo方法比較沒有返回0
自然排序
自然排序使用要排序元素的CompareTo(Object obj)方法來比較元素之間大小關係,然後將元素按照升序排列。
Java提供了一個Comparable介面,該接口裡定義了一個compareTo(Object obj)方法,該方法返回一個整數值,實現了該介面的物件就可以比較大小。
obj1.compareTo(obj2)方法如果返回0,則說明被比較的兩個物件相等,如果返回一個正數,則表明obj1大於obj2,如果是 負數,則表明obj1小於obj2。
如果我們將兩個物件的equals方法總是返回true,則這兩個物件的compareTo方法返回應該返回0
定製排序
自然排序是根據集合元素的大小,以升序排列,如果要定製排序,應該使用Comparator介面,實現 int compare(T o1,T o2)方法。

最重要:

1、TreeSet 是二差樹實現的,Treeset中的資料是自動排好序的,不允許放入null值。
2、HashSet 是雜湊表實現的,HashSet中的資料是無序的,可以放入null,但只能放入一個null,兩者中的值都不能重複,就如資料庫中唯一約束。
3、HashSet要求放入的物件必須實現HashCode()方法,放入的物件,是以hashcode碼作為標識的,而具有相同內容的 String物件,hashcode是一樣,所以放入的內容不能重複。但是同一個類的物件可以放入不同的例項 。

相關推薦

JAVA陣列去除重複資料

前一段時間被面試問到:如果一個數組中有重複元素,用什麼方法可以去重?一時間會想到用一種方法,但是後來查閱資料後發現,有好多方法可以實現,現在就總結一下,比較簡單的幾種。 一.用List集合實現 int[] str = {5, 6, 6, 6, 8

Java實現陣列去除重複資料的方法詳解

一.用List集合實現 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(

Java實現陣列去除重複資料的方法詳解(轉)

本文例項講述了Java實現陣列去除重複資料的方法。分享給大家供大家參考,具體如下: 前一段時間被面試問到:如果一個數組中有重複元素,用什麼方法可以去重?一時間會想到用一種方法,但是後來查閱資料後發現,有好多方法可以實現,現在就總結一下,比較簡單的幾種。 一.用List

Java實現陣列去除重複資料的方法

方法一:用List集合實現 package com.suanfa; import java.util.ArrayList; public class qqq { public static v

Js 陣列去除重複資料演算法

在JS中經常會遇到去除陣列中重複資料的需求,在此介紹四種演算法以實現JS陣列去重的功能. 1.速度最快演算法:物件鍵值對法     實現思路:          新建一js物件以及新陣列,遍歷傳入陣列時,判斷值是否為js物件的鍵,不是的話給物件新增該鍵並放入新陣

java 陣列去掉重複資料和排序

package arry; public class newAaay {public static void main(String[] args) {int[] arry = {90,23,45,19,23,12,12,12};int[] b = trim(arry);

js如何處理兩個json陣列去除重複資料,然後合併陣列

如:var a = [{"id":"1001","name":"張三","age":"18","address":"北京市朝陽區","school":"朝陽區第二中學"},{"id":"1002","name":"李四","age":"15","address":"北京市海淀

List集合去除重複資料 Java中List集合去除重複資料的方法

【轉自】Java中List集合去除重複資料的方法 1. 迴圈list中的所有元素然後刪除重複 public static List removeDuplicate(List list) { for ( int

去除陣列重複資料

public class DeleteDuplicate {     public static void main(String[] args) {         int[] array = new int

iOS 去除陣列重複資料的幾種方法

第一種:利用NSDictionary的AllKeys(AllValues)方法 程式碼: NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",

JAVA爬蟲爬取網頁資料資料庫中,並且去除重複資料

pom檔案 <!-- 新增Httpclient支援 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&

Java中List集合去除重複資料的方法

1. 迴圈list中的所有元素然後刪除重複 public   static   List  removeDuplicate(List list)  {          for  ( int  i  =   0 ; i  <  list.size()  -   1 ;

Java 字串陣列去除重複

public static void main(String[] args) { String[] temp = new String[]{"aaa","bbb","ccc","aaa","ccc"}; L

pandas dataframe去除重複資料pandas.DataFrame.drop_duplicates

例子: df2 = pd.DataFrame({'工參中沒有的cgi': self.mismatchedcgis}) # subset='工參中沒有的cgi' 表示只考慮列名為:工參中沒有的cgi 這一列的重複項,不設則需考慮全部列,也可以設成多列

JSON去除重複資料

var arr = [{ uuid: '1', name: '張三' }, { uuid: '2', name: '李四' }, { uuid: '3', name: '王五' }, { uuid: '2', name: '李四' }, { uuid: '1', name: '張三' }, {

jQuery 去除重複資料

    工作中肯定會碰見從介面中獲取到的多條資料一樣,如果在後臺可以處理,儘量在後臺處理掉,避免前臺處理重複資料(使用者是可以修改你的js檔案的),下面說的是從介面中直接獲取到的資料(當然了,這也不是我們自己提供的介面),一下是我個人的程式碼操作,一個菜鳥的理解: 1.首

兩個陣列去除重複元素

$a=array(1,2,3); $b=array(2,3,4); //得到存在於$a但不存在於$b中的元素組成的陣列 $c=array_diff($a,$b); //這裡簡單求出在$a但不在$b中的元素 var_dump($c);   //得到存在於$a但不存在於$b中的元

oracle去除重複資料常用的方法

建立測試資料 create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10)); insert into nayi224_180824 select 1, 2, 3 fro

NSArray 如何去除重複資料

方法一:  利用 NSSet 不會新增重複元素的特性,方法如下: NSSet *set = [NSSet setWithArray:myArray];      然後利用 [set allObjects] 獲取所有的元素。 這種方法最方便,但是有個缺點,就是獲得的結果

mybatis中resultMap丟失查詢結果,association“錯誤”去除重複資料的問題

  <resultMap id="commissionRec" type="CommissionRec" >         <result property="sourceName" column="cmr_sourceName"/>