接收int数组,找到重复的值及其索引,并在按照指定的格式打印

打印的格式如下:
值:2,位于: 3,6,9
值:2,位于: 3,6,9
值:2,位于: 3,6,9
....................................

public static void main(String[] args) {
int[] nums = {12, 18, 19, 15, 26, 29, 49, 15, 12, 19, 29, 12, 18};

//key为:nums中的数字, value:为key在数组中出现的
Map<Integer, List> map = new LinkedHashMap<>(); //LinkedHashMap 可以维护键值对 加入 map 的顺序

//遍历数组,将数组中的数字及其出现的位置建立映射关系
for (int x = 0; x < nums.length; x++) {
List positions = map.get(nums[x]);

if (positions == null) {
positions = new ArrayList<>();
map.put(nums[x], positions);
}
positions.add(x);
}

//遍历map,寻找有重复的元素
for (Map.Entry<Integer, List> entry : map.entrySet()) {
List values = entry.getValue();
if (values.size() > 1) { //说明元素重复
//取key
Integer num = entry.getKey();
//打印结果
pirntResult(num, values);
}
}

}

//打印结果:
private static void pirntResult(Integer num, List values) {
StringBuilder results = new StringBuilder();
results.append("值: ").append(num+",").append("位于: ");
for (Integer value : values) {
results.append(value).append(",");
}
results.setCharAt(results.length()-1,' ');
System.out.println(results);
}

posted @ 2018-08-09 19:12  abdcef  阅读(208)  评论(0)    收藏  举报