要求:清除数组中重复的元素
思路:因为开始时我以为是不能用集合(使用集合的方式在文章底部 ),所以绞尽脑汁在不用集合的情况下去除数组中重复的元素,需要些一个去除重复内容的方法,我首先想到的的需要一个存储去重后元素的数组,然后两层循环,外层遍历原数组,内容逐个判断是否和之后的元素重复,然后再提出来存入新的数组。
走的弯路:因为数组是有长度的,在使用数组之前一定要先初始化数组给定长度,我在确定去重后数组长度这里纠结和很久,最后想起了有个方法System.arraycopy(被复制的数组,起始下标,接收的新数组,起始下标,结束下标);可以直接复制数组,既然这样,我就没必要纠结新数组的长度了,直接声明一个跟原数组长度一样的临时数组,只要记录下去重后的元素个数,然后就可以确定去重后数组长度再去将临时数组拷贝到新数组就行了。
方法代码:
public static Object [] ifRepeat(Object [] arr){
int t = 0 ;
Object [] tempArr = new Object [arr.length];
for (int i = 0 ; i < arr.length; i++){
boolean isTrue = true ;
for (int j=i+1 ;j<arr.length;j++){
if(arr[i]==arr[j]){
isTrue = false ;
break ;
}
}
if(isTrue){
tempArr[t] = arr[i];
t++;
}
}
Object [] newArr = new Object [t];
System.arraycopy(tempArr,0 ,newArr,0 ,t);
return newArr;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
测试一下,可行
如果使用集合,那么去重复就简单多了。 只需要创建一个集合,然后遍历数组逐一放入集合,只要在放入之前用contains()方法判断一下集合中是否已经存在这个元素就行了,然后用toArray转成数组一切搞定。
代码:
import java.util.*;
public class Demo {
public static void main (String[] args) {
Object[] arr = {1 ,1 ,1 ,2 ,3 ,3 ,4 ,5 ,"夏" ,"夏" ,"冬" ,"春" ,};
List list = new ArrayList();
for (int i=0 ;i<arr.length;i++){
if (!list.contains(arr[i])){
list.add(arr[i]);
}
}
Object[] newArr = list.toArray();
for (int i=0 ;i<newArr.length;i++){
System.out .print(" " +newArr[i]);
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
最后,最简单的方法就是利用Set集合无序不可重复的特性进行元素过滤;
public static Object[] unique (Object [] arr){
Set set = new HashSet();
for (int i = 0 ; i < arr.length; i++) {
set .add(arr[i]);
}
return set .toArray();
}