Java合并两个数组去重升序排序运行结果错误排查
问题根因
你的代码输出错误核心是两个问题:
- 选择了错误的数据结构:
HashMap不会维护键的顺序,遍历Entry得到的键顺序由键的哈希值决定,和数值大小没有必然联系,根本无法保证输出是升序。你现在测试用例刚好是1-5的连续数,哈希值和数值本身一致,看起来好像顺序对,换一组非连续、非从1开始的数立刻就会乱序。 - 代码大括号完全错位:属于语法书写错误,缩进和实际作用域不匹配,很容易出现逻辑执行不符合预期的问题,而且你存在Map里的value是数组下标,这个值对去重、排序没有任何作用,属于冗余逻辑。
正确实现
要实现「两数组合并+去重+升序输出」,最简洁的方式是用TreeSet,这个集合默认按元素自然顺序升序存储,同时自动过滤重复元素,不需要手动写去重、排序逻辑:
import java.util.TreeSet; class Main { public static void main(String[] args) { int a[] = {1, 2, 3, 4}; int b[] = {1, 2, 3, 4, 5}; TreeSet<Integer> resSet = new TreeSet<>(); // 存入第一个数组元素 for (int num : a) { resSet.add(num); } // 存入第二个数组元素,重复值会自动被Set去重 for (int num : b) { resSet.add(num); } // 遍历输出即为升序去重结果 for (int num : resSet) { System.out.print(num + " "); } System.out.println(); } }
运行上述代码输出结果为:1 2 3 4 5 ,完全符合需求。
如果你不想依赖集合类,也可以手动实现:先把两个数组合并成一个大数组,调用Arrays.sort()排序后,遍历的时候跳过和上一个元素相同的值即可,不过TreeSet的写法代码量更少,出错概率更低。
内容的提问来源于stack exchange,提问作者shabbir katlariwala
相关产品推荐
相关产品推荐

