1. 程式人生 > >Java陣列去重的多種方法

Java陣列去重的多種方法

/*
陣列去重
1:遍歷陣列,將元素依次新增進結果集中,如果結果集中已經存在,則不再新增,O(n*n)
2:如果知道元素範圍,比如是字母,或者數字在固定範圍內,可以採用輔助陣列,輔助陣列下標是去重陣列的元素,輔助陣列元素時去重陣列元素的個數,O(n)
3:先將原陣列排序,在與相鄰的進行比較,如果不同則存入新陣列
4:利用HashSet集合無序不可重複的特性進行元素過濾
5:TreeSet不僅可以使元素不重複,而且可以實現排序等功能的集合
6:只需要建立一個集合,然後遍歷陣列逐一放入集合,只要在放入之前用contains()方法判斷一下集合中是否已經存在這個元素就行了
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;


class Deduplicate 
{
//O(n*n)
public static int[] deduplicate1(int[] array)
{
if (array==null||array.length==0)
{
return null;
}
ArrayList<Integer> al=new ArrayList<Integer>();
out:for (int i=0; i<array.length; i++)
{
for (int j=0; j<al.size(); j++)
{
if (array[i]==al.get(j))
{
continue out;
}
}
al.add(array[i]);
}


//Integer[] arrayResult =(Integer[])al.toArray(new Integer[al.size()]);
int[] arrayResult = al.stream().mapToInt(i->i).toArray();
/*
既不想用迴圈,又想要得到int[],那就只能在jdk8中使用IntStream
這是Java8 的新特性,它都做了什麼:
1. 首先從Integer陣列中獲取一個Stream 流 
2. 將流中的每一個元素拆箱; 
3. 呼叫toArray將拆箱之後的流轉換為陣列 
*/
return arrayResult;
}


//假設元素範圍是0-100,既可以去重,又可以排序
public static int[] deduplicate2(int[] array)
{
if (array==null||array.length==0)
{
return null;
}


int[] temp=new int[101];


for (int i=0; i<array.length; i++)
{
temp[array[i]]++;
}


ArrayList<Integer> al=new ArrayList<Integer>();
for (int i=0; i<temp.length; i++)
{
if (temp[i]!=0)
{
al.add(i);
}
}


return al.stream().mapToInt(i->i).toArray();
}


//先排序,然後相鄰的元素去重
public static int[] deduplicate3(int[] array)
{
if (array==null||array.length==0)
{
return null;
}

Arrays.sort(array);


ArrayList<Integer> al=new ArrayList<Integer>();
al.add(array[0]);


for (int i=1; i<array.length; i++)
{
if (array[i]!=array[i-1])
{
al.add(array[i]);
}
}


return al.stream().mapToInt(i->i).toArray();
}


//HashSet進行去重
public static int[] deduplicate4(int[] array)
{
if (array==null||array.length==0)
{
return null;
}


Set<Integer> set=new HashSet<Integer>();
for (int i=0; i<array.length; i++)
{
set.add(array[i]);
}


return set.stream().mapToInt(i->i).toArray();
}


//HashSet進行去重和排序
public static int[] deduplicate5(int[] array)
{
if (array==null||array.length==0)
{
return null;
}


Set<Integer> set=new TreeSet<Integer>();
for (int i=0; i<array.length; i++)
{
set.add(array[i]);
}


return set.stream().mapToInt(i->i).toArray();
}


public static int[] deduplicate6(int[] array)
{
if (array==null||array.length==0)
{
return null;
}
ArrayList<Integer> al=new ArrayList<Integer>();


for (int i=0; i<array.length; i++)
{
if (!al.contains(array[i]))
{
al.add(array[i]);
}
}


return al.stream().mapToInt(i->i).toArray();
}


public static void main(String[] args) 
{
int[] array={1,4,3,2,5,3,6,100,2};
System.out.println(Arrays.toString(deduplicate6(array)));
}
}

相關推薦

Java陣列多種方法

/* 陣列去重 1:遍歷陣列,將元素依次新增進結果集中,如果結果集中已經存在,則不再新增,O(n*n) 2:如果知道元素範圍,比如是字母,或者數字在固定範圍內,可以採用輔助陣列,輔助陣列下標是去重陣列的元素,輔助陣列元素時去重陣列元素的個數,O(n) 3:先將原陣列排序,在

iOS陣列方法,超級簡單

//最近新發現的一個數組去重,用不著迴圈,一句程式碼搞定 //去除陣列中重複的 NSArray *oldArr = @[@"1",@"2",@"3",@"4",@"5",@"6",@"2",@"3"]; NSArray *newarr = [oldArr valueForKeyPath:

javascript之九種陣列方法

       陣列去重,第一反應就是for迴圈,如果一個for迴圈解決不了,那就多來幾個。。。哈哈,心血來潮查了下陣列去重的方法,是我見識短淺。以下,我將介紹九種js中陣列去重的方法: 利用 ES6 Set去重 利用splice()去重 利用indexOf()去重  

java陣列

閒來無事寫個陣列去重的方法,如果有更好,更簡潔的方法請大家不要忘了留言給我哦! public static void main(String[] args) { String[] arr = {"jslkdfj", "sds", "ss", "dd", "nn

JavaScript 高效能陣列方法(小結)

一、測試模版 陣列去重是一個老生常談的問題,網上流傳著有各種各樣的解法 為了測試這些解法的效能,我寫了一個測試模版,用來計算陣列去重的耗時 // distinct.js let arr1 = Array.from(new Array(100000), (x, index)=>

面試題——4種陣列方法

陣列去重或者其衍生作為筆試題或者機試題出現的機率也是很大的,寫出的方法越多,則讓面試官覺得你思維越開闊,那麼成功的機率當然就大了。 廢話不多說,下面來說說下面我整理的4中陣列去重的方法 方法一: findInArr方法+select方法組合 findInArr : 查詢一個數在當前陣列中是否存在,存在返回t

五種js實現陣列方法

第一種 刪除後面重複元素 function removeRepeat1(arr){ var a1=((new Date).getTime()) for(

ES6陣列方法(方法集合)

方法一: function unique(arr) { const res = new Map(); return arr.filter((a) => !res.has(a) &

js陣列常用方法

js陣列去重是面試中經常會碰到的問題,無論是前端還是node。js陣列常見的有兩種形式,一種是陣列各元素均為基本資料型別,常見的為陣列字串格式,形如['a','b','c'];一種是陣列各元素不定,元素中既有基本資料型別,也有引用資料型別,形式如[{name:1,age:2}];這裡介紹兩種常見的js去重方式

js中8種陣列方法

第一種:function deRepeat(arr){ var newArr=[]; for(var i=0;i<arr.length;i++){ if(newArr.indexOf(arr[i])==-1){//如果新

【校招】百度面試題-4種陣列方法

第一部分原文連結:http://blog.csdn.net/u011277123/article/details/54091442第二部分原文連結:http://blog.csdn.net/icessunt/article/details/69098474方法一: findI

js陣列方法

1、物件存放,雜湊演算法(對映)判斷 Array.prototype.unique = function() { // n為hash表,r為臨時陣列 var n = {}, r = []; for (var i = 0; i <

js陣列方法!!!

第一種是比較常規的方法 思路: 1.構建一個新的陣列存放結果 2.for迴圈中每次從原陣列中取出一個元素,用這個元素迴圈與結果陣列對比 3.若結果陣列中沒有該元素,則存到結果陣列中 複製程式碼程式碼如下: Array.prototype.unique1 =

PHP二維陣列方法(保留各個鍵值的同時去除重複的項)-- 二維陣列的唯一性

對於如下二維陣列,要求對其進行去重: $arr = array( '0'=>array( 'name'=>'james', 'age'=>30,

JAVA陣列和JavaScript陣列比較

JS的直覺方案: 對於陣列去重,只要寫過程式的,立刻就能得到第一個解法: function unique(arr) { var ret = [] for (var i = 0; i < arr.length; i++) {

JS實現陣列方法

1.使用ES6的Set進行去重 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>陣列去重</title>

JavaScript 陣列多種方法原理詳解

說明 陣列去重,這是一個面試經常會遇見的問題,網上講陣列去重的文章也是特別的多,但是我們依舊來講講陣列去重,這篇文章比較適合於接觸過一段時間的JavaScript的初學者,希望這篇文章能給初學者帶來一些幫助。 方法一 function unique(arr

JavaScript 一維陣列、二維陣列方法

1.使用ES6語法 set方法陣列去重:: a=[1,2,3,4,1,2,3,4]; [...new Set(a)]; //[1, 2, 3, 4] 2.一維陣列去重方法 function unique1(array){ var n = []; //一個新的臨時陣列

JS實現陣列方法總結(三種常用方法)

方法一: 雙層迴圈,外層迴圈元素,內層迴圈時比較值 如果有相同的值則跳過,不相同則push進陣列 Array.prototype.distinct = function(){  var arr = this,result = [], i,j,len = arr.length;  f

JavaScript的函式(定義與解析、匿名函式、函式傳參、return關鍵字)和陣列(操作資料的方法、多維陣列陣列

函式 函式就是重複執行的程式碼片。 1、函式定義與執行 <script type="text/javascript"> // 函式定義 function aa(){ alert('hello!'); } // 函式執行