java 数组去重_java面试题:数组去重

面试中遇到一道笔试题,写一个数组去重的方法。

方法一

我们可以创建一个空的List,遍历数组,依次将数组中的值传入List,利用List的 contains()方法,如果List已经包含当前遍历到的数组元素,则不添加进List,保证其唯一性;用List的toArray()方法把集合转换成数组。

public static void duplicateRemovalByList(String [] arrStr) {

List list = new ArrayList();

for (int i=0; i

if(!list.contains(arrStr[i])) {

list.add(arrStr[i]);

}

}

String[] newArrStr = list.toArray(new String[1]);

System.out.println(Arrays.toString(newArrStr));

}

方法二

利用Map集合键的不可重复性,遍历数组,把每个数组元素都传进Map集合,得到乱序而不重复的Map集合;再用Map的keySet().toArray()方法把集合转换成数组。

public static void duplicateRemovalByMap(String [] arrStr) {

Map map = new HashMap();

for (String str : arrStr) {

map.put(str, str);

}

String[] newArrStr = map.keySet().toArray(new String[1]);

System.out.println(Arrays.toString(newArrStr));

}

方法三

利用数组去重,先创建一个新的数组B,与原数组A等长,先不传入值(则B = { null , null , null , ... , null });立一个flag并遍历A,依次取A中每一个值与B中所有值作比较,一旦值比较出相等的,则flag设false,当A中这一个值与B中所有值比较完之后,flag如果还是true,则把A的当前值传给B,如为false则不做操作,进入下一轮循环,保证唯一性;当遍历完A后,得到一个等长、无重复的B(末尾可能有多个null值),并得到末位非null的索引值index;创建新数组C,长度为index,遍历B数组(仅取到索引为index),传入C。

public static void duplicateRemovalByArr() {

Integer[] arr = { 1, 1, 2, 3 };

Integer[] tmp = new Integer[arr.length];

int m = 0;

for (int i = 0; i < arr.length; i++) {

// 判断tmp数组是否存在

boolean flag = true;

for (int n = 0; n < tmp.length; n++) {

if (tmp[n] == arr[i]) {

// 如果有相等的,设置为flase

flag = false;

}

}

if (flag) {

tmp[m++] = arr[i];

}

}

// list去重

Integer[] newArr = new Integer[m];

// 检测数组有多少为null,并且赋值为新的数组

for (int k = 0; k < m; k++) {

newArr[k] = tmp[k];

}

tmp = newArr;

System.out.println(Arrays.toString(tmp));

}

方法四

实例化一个Set集合,遍历数组并存入集合,如果元素已存在则不会重复存入,最后返回Set集合的数组形式。

public static Object[] duplicateRemovalBySet(Object[] arr){

Set set = new HashSet();

for (int i = 0; i < arr.length; i++) {

set.add(arr[i]);

}

return set.toArray();

}

方法五

通过链表去重,遍历数组,传入LinkedHashSet,得到无重复的元素集合;创建迭代器,迭代集合。

public static void duplicateRemovalByLink(Object[] arr){

LinkedHashSet link = new LinkedHashSet();

for (int i = 0; i < arr.length; i++) {

link.add(arr[i]);

}

Iterator iterator = link.iterator();

System.out.println(link);

/*

* while (iterator.hasNext()) { System.out.print(iterator.next()+" "); }

*/

}

鸢飞戾天,经纶世务

2019年7月30日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值