HP--day06--输入一组数去重并排序
2015-08-29 22:13
323 查看
HP--day06--输入一组数去重并排序
在控制台输入一组数,去除重复的数字并按照升序顺序排列。
从控制台读入数字,先通过scanner.next()读取字符串,然后再用 string.match("")方法通过正则表达式来验证是否是数字。升序可以通过冒泡排序、选择排序、插入排序等等 但是利用jdk提供的 Arrays.sort(数组名),这种方法执行效率比较高,一个问题有多种解决方法的同时还要考虑执行效率的问题。最后是去重,去重可能要先排序然后比较相邻的数字,相同的写入到另一个数组中,或者移动本数组的元素覆盖相同的数组元素。如果数量量非常大通过移动数组的元素来去重执行效率显然是非常低的。通过利用HashSet可以实现去重的效果,比较相同的数据在HashSet中只能出现一次。但是如果先排序按照升序的顺序通过add()方法添加到HashSet集合中,打印出来的却不是按照升序的顺序,因为HashSet的存放时按照哈希算法排序的,所以应当先
去重再排序。或者将HashSet去重后的数据放到List中(List是有序可重复的,HashSet是无序不可重复的) 。
然后通过iterator迭代输出HashSet中的数,再通过Arrays.sort()排序
在控制台输入一组数,去除重复的数字并按照升序顺序排列。
从控制台读入数字,先通过scanner.next()读取字符串,然后再用 string.match("")方法通过正则表达式来验证是否是数字。升序可以通过冒泡排序、选择排序、插入排序等等 但是利用jdk提供的 Arrays.sort(数组名),这种方法执行效率比较高,一个问题有多种解决方法的同时还要考虑执行效率的问题。最后是去重,去重可能要先排序然后比较相邻的数字,相同的写入到另一个数组中,或者移动本数组的元素覆盖相同的数组元素。如果数量量非常大通过移动数组的元素来去重执行效率显然是非常低的。通过利用HashSet可以实现去重的效果,比较相同的数据在HashSet中只能出现一次。但是如果先排序按照升序的顺序通过add()方法添加到HashSet集合中,打印出来的却不是按照升序的顺序,因为HashSet的存放时按照哈希算法排序的,所以应当先
去重再排序。或者将HashSet去重后的数据放到List中(List是有序可重复的,HashSet是无序不可重复的) 。
然后通过iterator迭代输出HashSet中的数,再通过Arrays.sort()排序
<pre name="code" class="java">import java.util.HashSet; import java.util.Iterator; import java.util.Scanner; import java.util.Set; import java.util.Arrays; public class QuChong { Scanner scanner = new Scanner(System.in); int[] a = new int[100]; public static void main(String[] args) { QuChong qc = new QuChong(); qc.start(); } public void start() { int count = inputa();// 获取输入了多少个数字 Set hashSet = new HashSet<Integer>(); for (int i = 0; i < count; i++) { hashSet.add(a[i]); } Iterator<Integer> it = hashSet.iterator(); int countSet = 0; int[] d = new int[hashSet.size()]; while (it.hasNext()) { d[countSet++] = it.next(); } Arrays.sort(d);// 对d数组从小到大排序 for (int i : d) { System.out.print(i + ","); } } // 判断并读取数字 public int inputa() { int i = 0; while (true) { System.out.println("请输入第" + (i + 1) + "个数字"); String s = scanner.next(); if (s.matches("^[0-9]*$")) {// 利用正则表达式判断是否为数字 a[i++] = Integer.parseInt(s); } else if (s.equals("n")) { break; } } return i; } }
相关文章推荐
- HDU 5422:Rikka with Graph
- BestCoder Round #53
- PullScrollView详解(六)——延伸拓展(listview中getScrollY()一直等于0、ScrollView中的overScrollBy)
- 讯飞在线语音合成
- 增加个人博客地址,欢迎访问
- 统计数据的类型的划分
- HDU 5422:Rikka with Graph
- [C++]Kth Smallest Element in a BST 在一个二叉排序树中找第k小的元素
- C模板实现STL容器中的vector
- LeetCode Linked List Cycle
- 二叉树的建立
- 用Python实现基本排序算法03——插入排序
- javascript 面向对象
- AJAX 跨域 :Access-Control-Allow-Origin
- LeetCode Linked List Cycle
- 编写灵活、稳定、高质量的 HTML 和 CSS 代码的规范。
- TextNut文件保存路径
- Linux 内存管理机制
- Windows系统下Python与NumPy安装方法
- Python str字符串常用到的函数