您的位置:首页 > 编程语言 > Java开发

java 删除数组中重复元素

2012-11-07 19:38 651 查看
package com.akfucc.zhidao;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class P124876743 {
public static void main(String[] args) {
int[] nums = { 1, 2, 3, 3, 3, 3, 4 };
List<Integer> numList = new ArrayList<Integer>();
for (int i : nums)
numList.add(i);
System.out.println(numList);

// 做删除
Iterator<Integer> it = numList.iterator();
int temp = -1;
if (it.hasNext())
temp = it.next();
while (it.hasNext()) {
int i = it.next();
if (i == temp) {
it.remove();
} else {
temp = i;
}
}
System.out.println(numList);
}
}
---------------------------------------
把数组中的元素取出放入一个HashSet中,这样就可以过滤重复的值了。
用hashset 重复的自动去掉了
HashSet hashset=new HashSet();
hashset。add(1);
都加进去
Iterator iterator=hashset。itertaor();
做一个while循环 输出
就ok了
-------------------------------------------------
如果你要得到的数组可以无序的话将原数组里的元素放到HashSet中就行了,如果你想得到的数组还要之前的顺序的话,就只能一个个比了,从头开始遍历,看每个元素跟它前面的元素有没有重复有则删掉。
-----------------------------------------------------
Integer str[] = {1,2,3,3,3,4};
Set <Integer>set=new TreeSet<Integer>(Arrays.asList(str));
Integer[] newArray=set.toArray(new Integer[set.size()]) ;
for(Integer i:newArray){
System.out.println(i);
}
//System.out.println(set);
--------------------------------------------
private static  int [ ]  supRep( int [ ]  x) {int[] tempArray = new int[x.length];boolean repeated = false;int nbNonRep=0;//Verify for each elementfor (int i=0; i<x.length; i++){for (int j=i+1; j<x.length; j++){if (x[i]==x[j]){// x[i] is repeatedrepeated = true;break;}}if (repeated == false){// a non repeated numbertempArray[nbNonRep++]=x[i];}repeated = false;}int[] resultArray = new int[nbNonRep];System.arraycopy(tempArray, 0, resultArray, 0, nbNonRep);return(resultArray);}public static void main(String[] args) {int [ ] arr = new int[]{2,5,6,6,8,12,3,5};int [] a = supRep(arr);for (int i = 0; i<a.length; i++){System.out.print(a[i]+ " ");}}-------------------------------------------------------------------------测试结果:run:2 6 8 12 3 5 成功生成(总时间:0 秒)-------------------------------------------------------------------------当然,我是用两个两个数比较的,如果数据量非常大,比如几万几十万或者更多数字,最好做一个Tree,这样浏览一遍你的Array就OK了-------------------------------------------------------------------------如果想要简单,用ArrayList就可以了:ArrayList myList = new ArrayList();for (int i=0; i<arr.length; i++){if (!myList.contains(arr[i])) myList.add(arr[i]);}for (int i = 0; i<myList.size();i++){System.out.print(myList.get(i) + ", ");}不过程序效率肯定是不高的ArrayList:底层用数组实现的List 。特点:查询效率高,增删效率低 轻量级 线程不安全。HashSet:采用哈希算法来实现Set接口, 唯一性保证:重复对象equals方法返回为true ,重复对象hashCode方法返回相同的整数不同对象 哈希码 尽量保证不同(提高效率)。TreeMap:集合是指一个对象可以容纳了多个对象(不是引用),这个集合对象主要用来管理维护一系列相似的对象。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: