接收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<Integer>> map = new LinkedHashMap<>(); //LinkedHashMap 可以维护键值对 加入 map 的顺序

    //遍历数组,将数组中的数字及其出现的位置建立映射关系
    for (int x = 0; x < nums.length; x++) {
        List<Integer> 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<Integer>> entry : map.entrySet()) {
        List<Integer> values = entry.getValue();
        if (values.size() > 1) {   //说明元素重复
            //取key
            Integer num = entry.getKey();
            //打印结果
            pirntResult(num, values);
        }
    }

}

//打印结果:
private static void pirntResult(Integer num, List<Integer> 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  阅读(189)  评论(0编辑  收藏  举报