利用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