1. 程式人生 > >利用Set實現集合元素去重

利用Set實現集合元素去重

  有些情況下,出於某種目的,我們需要對一些集合進行去重操作。最容易想到的方法也就是雙層for迴圈,但是很明顯,這種方法逼格很低。
  這時候我想到了Java中的Set:注重獨一無二的性質,該體系集合可以知道某物是否已近存在於集合中,不會儲存重複的元素。
  然而,這時候又存在一個新的問題:Java中的資料型別很明顯不止一種,這樣的話,沒對一種資料型別的集合進行去重,我就要重新寫一個方法,很明顯,這種方法逼格也略低。
  這時候我又想到了兩個神奇的操作:泛型、反射。利用泛型和反射機制,我就可以實現去重的通用方法

反射:Java反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。

一、去除陣列中的重複資料

/**
  * 去除陣列中的重複資料
  *
  * @param array 泛型陣列
  * @param clazz 類
  * @param <T>   泛型
  * @return 去重之後的資料
  */
 public static <T> T[] removeArrayDuplicateData(T[] array, Class<T> clazz) {
     if (null == array || array.length == 0) {
         return null;
     }
     // 利用set去重
Set<T> set = new HashSet<>(); for (int i = 0; i < array.length; i++) { set.add(array[i]); } // 重新轉換成陣列 return (T[]) set.toArray((T[]) Array.newInstance(clazz, set.size())); }

二、去除ArrayList中的重複資料

/**
 * 去除ArrayList中的重複資料
 *
 * @param list 泛型List
 * @param
<T> 泛型 * @return 去重之後的資料 */
public static <T> List<T> removeListDuplicateData(List<T> list) { if (null == list || list.size() == 0) { return null; } // 利用set去重 Set<T> set = new HashSet<>(); for (int i = 0; i < list.size(); i++) { set.add(list.get(i)); } // 清空之前的List list.clear(); // 利用List本身的addAll方法,將Set轉換成List list.addAll(set); return list; }

以上,其他的想到再補充

相關推薦

利用Set實現集合元素

  有些情況下,出於某種目的,我們需要對一些集合進行去重操作。最容易想到的方法也就是雙層for迴圈,但是很明顯,這種方法逼格很低。   這時候我想到了Java中的Set:注重獨一無二的性質,該體系集合

C++ 利用set為vector陣列

#include<set> #include<vector> #include<iostream> using namespace std; int main() {vector<int> vec;vec = { 1, 2,

利用set集合進行list集合高效

  我們可以知道Set集合是沒有重複資料的特性,那麼對於元素為物件 的情況是否也同樣奏效?可以看一下。舉一個例子: SetTest.java:   class VO { private String name; private

利用set集合進行

    對於一連串字串,我們可以通過Set集合來進行去重,原因不解釋。最後用迭代器迭代出來即可。 Set<String> hashPre = new HashSet<String>(); for (int i = 0; i <

leetcode筆記_集合和對映的使用及比較 (集合元素,對映的元素頻次記錄)

349. 兩個陣列的交集 給定兩個陣列,編寫一個函式來計算它們的交集。 示例 1: 輸入: nums1 = [1,2,2,1], nums2 = [2,2] 輸出: [2] 示例 2: 輸

set集合

set的新增資料方法有二, 區別: add() 方法會將整個資料作為一項加入,而 update() 會將整個資料切分成單個字元逐一新增進 set() 集合 1、呼叫 update() 方法 >>> b=set() >>> b.upda

JS實現數組

遍歷數組 strong ash blog length 數組下標 檢測 lastindex i+1 1.遍歷數組法 它是最簡單的數組去重方法(indexOf方法) 實現思路:新建一個數組,遍歷去要重的數組,當值不在新數組的時候(indexOf為-1)就加入該新數組中; v

Java實現對List

bject origin 使用 去重 add bsp list去重 test list 方式一,使用for循環遍歷去除List中的重復元素代碼如下   public static void main(String[] args) { Test07 tes

使用js裏面的叠代器filter實現數組

效果 log 運行 div 實現 返回 事情 item 寫到 實現數組去重的方法很多,最原始的方法是一個值一個值的去遍歷,寫到空數組裏面: let r=[],arr = [‘a‘, ‘b‘, ‘c‘, ‘a‘]; for(var i=0,len=arr.length

ES6 - 一條代碼實現數組

代碼實現 index clas fun urn new ret war dex arr = [12,5,6,4,5,6,7,12,0,5,6,7,5,4,5,0] let newarr = arr.filter((item,index,nowArr) => nowAr

js實現數組(方式大匯總)

turn return In 存在 特性 var proto dex con 方法一:創建新數組 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]; 3 Array.prototype.reArr = function(){ 4

5種方法實現數組

RR 字符串 字符 ++ font i++ div sof n) 最簡單的思路,先創建一個新數組作為容器,遍歷原數組,判斷每一項在新數組中是否存在,若不存在則把這一項push到新數組中,若存在則忽略。 var arr = [1, 2, 3, 2, 4, 1]; var

go語言實現數組

bsp clas == 實現 int list div append func import ( "fmt" ) func main() { a := []int{2, 1, 2, 5, 6, 3, 4, 5, 2, 3, 9} z := Rm_

JS實現數組方法總結(極速PC蛋蛋六種方法)

組元 urn 合並 ++i push oop tarray 開始 實現 方法一: 雙層循環,外層循環元素極速PC蛋蛋QQ2952777280【話仙源碼論壇】hxforum.com【木瓜源碼論壇】papayabbs.com,內層循環時比較值 如果有相同的值則跳過,不相同則pu

ES6 set方法對數組和排序

har con head ons 之前 對數 rip each 麻煩 之前對數組做去重有很多方法,但大多比較麻煩,現在用ES6裏面的set方法非常方便 直接上代碼 <!doctype html> <html> <head> &l

python列表裡的字典元素

去重 def list_dict_duplicate_removal(): data_list = [{"a": "123", "b": "321"}, {"a": "123", "b": "321"}, {"b": "321", "a": "123"}] run_function

利用物件對陣列進行排序

第一家公司: 上海莘亮網路科技有限公司 問題:1資料內嵌瞭解多少             2.熟悉php框架thinkcmf      &nb

python對列表中的元素並保持原順序

python對列表中的元素去重並保持原順序 對列表去重操作最快捷方便的就是把列表轉成元組,但是元組是無序的,所以轉成元組的話,原來的資料順序會發生變化,所以我們可以用sort()中的key欄位進行設定。 #隨便建立一個有重複資料的列表 lt1 = [0,1,2,3,4,4,5,5,6

list元素的問題情況

附上問題程式碼情況 public static void listTest2(){ List<String> list = new ArrayList<String>

記錄一下今天 寫了一個TreeSet實現了日期以及排序

Set<String> monthset =new TreeSet<String>(new Comparator<String>(){ public int compare(String s1, String s