java arrylist将重复数字找出_如何在一维数组中查找某重复元素,并输出其位置?用java实现...

这种情况适合使用 Map,Map 的键 为 nums 中的整数,值 为 nums 中整数的所有位置 —— 位置数大于 1,那么说明该整数在数组中重复

import java.util.*;

public class Main {

public static void main(String[] args) throws Exception {

int[] nums = {12, 18, 19, 15, 26, 29, 49, 15, 12, 19, 29, 12, 18};

// map 的键 为 nums 中的整数,值 为 nums 中整数的位置

Map> map = new LinkedHashMap<>(); // LinkedHashMap 可以维护键值对 加入 map 的顺序

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

List positions = map.get(nums[i]);

if (positions == null) { // 如果 map 的键 中不存在这个整数

positions = new ArrayList<>(1);

map.put(nums[i], positions); // 将这个整数和与其关联的位置 positions 放入 map

}

positions.add(i);

}

for (Map.Entry> entry : map.entrySet()) {

List positions = entry.getValue();

if (positions.size() > 1) { // 如果一个整数对应的位置数量大于 1,说明这个整数重复

int num = entry.getKey();

printResult(num, positions);

}

}

}

private static void printResult(int num, List positions) {

StringBuilder result = new StringBuilder();

result.append(num).append(' ').append('{');

for (Integer position : positions) {

result.append(position).append(',');

}

result.setCharAt(result.length() - 1, '}'); // 把最后一个 , 替换为 }

System.out.println(result);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值