1. 程式人生 > >優雅的找出ArrayList中重複的元素

優雅的找出ArrayList中重複的元素

故意強調了優雅,所以雙迴圈什麼的就別來了...先謝為敬

看到了群裡分享的程式碼,所有自己嘗試了一下,就當是技術積累啊,雖然還有四門期末考,但是還是技術對我的誘惑力更大,請再讓我內心默唸一百遍:考試全部順利通過,哈哈

方法1

程式碼:

import java.util.List;
import java.util.ArrayList;

/**
 * Created by cxh on 17/1/9.
 */
public class Main {
    public static void main(String[] args){
        List<String> list = new ArrayList<String>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");
        list.add("aaa");
        list.add("aaaa");
        list.add("eee");
        list.add("bbb");
        list.add("ccc");
        StringBuilder builder = new StringBuilder();
        for(String str : list) {
            // 如果不存在返回 -1。
            if(builder.indexOf(","+str+",") > -1) {
                System.out.println("重複的有:"+str);
            } else {
                builder.append(",").append(str).append(",");
            }
        }
    }
}

執行結果:

重複的有:aaa
重複的有:bbb
重複的有:ccc

方法2

程式碼如下:

package netmethod;

import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * Created by cxh on 17/1/9.
 */
public class Main {
    public static void main(String[] args){
        List<String> list=new ArrayList<String>();
        list.add("string1");
        list.add("string2");
        list.add("string3");
        list.add("string1");
        list.add("string1");
        list.add("string1");
        list.add("string2");
        //list.add("string3");
        HashMap<String,Integer> hashMap=new HashMap<String, Integer>();
        for(String string:list){
            if(hashMap.get(string)!=null){  //hashMap包含遍歷list中的當前元素
                Integer integer=hashMap.get(string);
                hashMap.put(string,integer+1);
                System.out.println("the element:"+string+" is repeat");
            }
            else{
                hashMap.put(string,1);
            }
        }
    }
}

執行結果:

the element:string1 is repeat
the element:string1 is repeat
the element:string1 is repeat
the element:string2 is repeat

方法3

 因為我沒有用java8,所以idea不支援stream,所有此方法沒有驗證,暫時儲存啦。

程式碼如下:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {

    public static <E> List<E> getDuplicateElements(List<E> list) {
        return list.stream() // list 對應的 Stream
                .collect(Collectors.toMap(e -> e, e -> 1, (a, b) -> a + b)) // 獲得元素出現頻率的 Map,鍵為元素,值為元素出現的次數
                .entrySet().stream() // 所有 entry 對應的 Stream
                .filter(entry -> entry.getValue() > 1) // 過濾出元素出現次數大於 1 的 entry
                .map(entry -> entry.getKey()) // 獲得 entry 的鍵(重複元素)對應的 Stream
                .collect(Collectors.toList());  // 轉化為 List
    }

    public static void main(String[] args) throws Exception {
        List<String> list = Arrays.asList("a", "b", "c", "d", "a", "a", "d", "d");
        List<String> duplicateElements = getDuplicateElements(list);

        System.out.println("list 中重複的元素:" + duplicateElements);
    }

}

執行結果:

list 中重複的元素:[a,d]

相關推薦

優雅ArrayList重複元素

故意強調了優雅,所以雙迴圈什麼的就別來了...先謝為敬 看到了群裡分享的程式碼,所有自己嘗試了一下,就當是技術積累啊,雖然還有四門期末考,但是還是技術對我的誘惑力更大,請再讓我內心默唸一百遍:考試全部

陣列:陣列重複元素最多的數

題目描述: 如何找出陣列中重複元素最多的數 思路: 使用Map對映表記錄每一個元素出現的次數,然後判斷次數大小,進而找出重複次數最多的元素。key表示陣列的元素,value表示這個元素在陣列中出現的次數。最後對map進行遍歷。 程式碼: /** * 使用map

如何陣列重複元素最多的數

package java程式設計師面試筆試寶典; import java.util.Collections; import java.util.HashMap; import java.util.Ma

javaSE (三十二)字串重複元素並寫入檔案、模擬正版軟體使用次數期限、獲取資料夾下的全部java檔案

1、找出字串中重複的元素並寫入檔案: 問題:鍵入(或者從一個檔案中讀取)一個字串,找出字串中重複的元素並寫入檔案 思路: 鍵入字串 map儲存 寫入檔案 程式碼: package cn.njupt; /* * * 鍵入一串字元,計算每個字元出

陣列重複次數最多的元素

思路: 最簡單的方法就是定義一個數組b把相同的元素放到對應位置,如果陣列a的元素等於這個下標,那麼這個下標對應的值就加1,最後找出這個陣列中最大值返回下標,這個方法浪費很大空間,不推薦。 新的思路:採用map,定義一個map,初始值預設為0,迴圈遍歷陣列a,

劍指Offer-3 陣列重複的數字

題目: 給定一個長度為 n 的整數陣列 nums,陣列中所有的數字都在 0∼n−1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意一個重複的數字。 注意:如果某些數字不在 0∼n−1 的範圍內,或陣列中不包含重複數字,則返回 -1

Day14陣列重複的資料

problem describe: 給定一個整數陣列 a,其中1 ≤ a[i] ≤ n (n為陣列長度), 其中有些元素出現兩次而其他元素出現一次。 找到所有出現兩次的元素。 你可以不用到任何額外空間並在O(n)時間複雜度內解決這個問題嗎? solution:

劍指offer 1. 陣列重複的數字

給定一個長度為 n 的整數陣列 nums,陣列中所有的數字都在 0∼n−1 的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。 請找出陣列中任意一個重複的數字。 注意:如果某些數字不在 0∼n−1 的範圍內,或陣列中不包含重複數字,則返回 -1;

刪除一張表重複的值以及查重複兩條以上的資料

-- SELECT MIN(id) FROM ctydetail GROUP BY originalcode HAVING COUNT(originalcode) > 1 -- SELECT originalcode FROM ctydetail GROUP BY o

第一題:列表元素的和為一定值的元素下標

題目: Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each inpu

陣列重複次數最多的數

方法一:如果相同的數是連續出現 從第一個數開始,與它後面的數比較,如果相同,計算+1,如果不等,計數置為1.同時保持此時的計數次數和此時的元素; #include<stdio.h> in

怎樣集合所有子集,怎樣集合指定元素的所有子集?

集合中的組合演算法 Java 沒有自帶的求一個集合的所有子集的方法,我們可以通過集合的子集規律來求。 思路: 對集合中所有元素進行標記,0表示未選中,1表示選中。 示例: 集合{1,2,3,4},長度為4,則 0000表示一個都不選,0001表示選數集合中第一個元素

燒腦資料庫演算法題 Postgresql 陣列重複的手機號

備註:此演算法也適用於人脈搜尋(比如共同的好友等) so 思想很重要,工具不重要,思想錯了幹得再多也是白乾.有了思想你也可以無限擴充套件 搜尋人脈關係比查重複的手機號快的多,重複的手機號畢竟要全表比較,人脈搜尋關係只需要掃描相關的資料即可,估計應該可以在10

陣列不同元素並統計相同元素的個數

public void getDifference(int[] arr) { Dictionary<int, int> dic= new Dictionary<int, int>();

如何陣列重複次數最多的數

eg 陣列{1,1,2,2,3,4,4,4,4,5,5,5,6,6} 元素1出現的次數為2, 元素2出現的次數為2,元素3出現的次數為1,元素4出現的次數為4,元素5出現的次數為3,元素6出現的次數

python-2.陣列重複的數字

題目描述: 在一個長度為n的數組裡的所有數字都在0~n-1的範圍內,陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出數字中任意一個重複的數字。例如,如果輸入長度為

問題8:如何陣列重複次數最多的數?

一種方法是以空間換時間,可以定義一個數組 int count[MAX],並將其陣列元素都初始化為0,然後執行for(int i=0; i<100; i++)   count[A[i]]++操作,在count中找最大的數,即為重複次數最多的數。       程式碼如下:

陣列唯一的重複元素

題目:陣列 arr[N],1 至 N 這 N - 1 個數存放在 arr[N] 中,其中某個數重複一次,寫一個函式,找出重複的數字。要求每個陣列元素只能訪問一次,不用輔助儲存空間。 分析:由於題目要求每個陣列元素只能訪問一次,不用輔助儲存空間,可以從原理上入手

資料結構——陣列(5)陣列唯一重複的數(元素範圍1~1000)

這個題目本身就有一定侷限性。比如,對於陣列a[10001],其中,1000個數就是1~1000的每個數,可以任意排列,然後再多一個重複的數。題目就是怎麼求出這個特殊的重複的數。 這一類問題的解決思路主要有以下幾種: 方法一:先求和,再相減。即陣列元素值求和,

Problem B: 零起點學演算法81——陣列最大元素的位置(下標值

#include<stdio.h> int main(void) { int n,a[10],i,max; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",