这里的 Collection、List、Set和Map都是接口(Interface)。 List lst = new ArrayList(); 这是我们平常经常使用的创建一个新的List的语句,在这里, List是接口,ArrayList才是具体的类。
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
Map<--TreeMap
Map<--HashMap
Collection/Map | 接口 | 成员重复性 | 元素存放顺序( Ordered/Sorted ) | 元素中被调用的方法 | 基于那中数据结构来实现的 |
HashSet | Set | Unique elements | No order | equals() hashCode() | Hash 表 |
LinkedHashSet | Set | Unique elements | Insertion order | equals() hashCode() | Hash 表和双向链表 |
TreeSet | SortedSet | Unique elements | Sorted | equals() compareTo() | 平衡树(Balanced tree ) |
ArrayList | 面试题-分解质因数 - 漫步枫 阅读原文»
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 网上这道题一搜就能找到,但是我看到的一个答案是这样的:
1 import java.util.Scanner; 2 3 public class lianxi04 { 4 public static void main(String[] args) { 5 Scanner s = new Scanner(System.in); 6 System.out.print("请键入一个正整数: "); 7 int n = s.nextInt(); 8 int k = 2; 9 System.out.print(n + "="); 10 while (k <= n) { 11 if (k == n) { 12 System.out.println(n); 13 break; 14 } else if (n % k == 0) { 15 System.out.print(k + "*"); 16 n = n / k; 17 } else { 18 k++; 19 } 20 } 21 } 22 }
这道题本身并没有什么难度,只要思路对了无论使用递归还是循环都可以解决。顺便说一下解题思路吧。接受一个输入的数字,就是被分解的数字(num),最小的质子数是2,然后num除以2,如果可以整除,2就是一个质因数,如果不可以2+1,再拿num除以进行整除判断。对所得的质因数输出。 这么写当然是可以得出正确答案的,但是想一想,这样的代码好吗? 以上代码有以下几点不好的地方: 1、 所有代码都写到了main中,这个是很不好的习惯,main方法一般就是做启动jvm用的不应该含有业务逻辑; 2、 请接受一个用户输入的数字从控制台接收,如果这个输入的数据是从一个界面或者网络来的,那这个程序不是得整体改动,获取处理数据应该是有一个方法封装。 3、 从控制台接收数据,获得的数据类型是int,但是以上程序在输入a这样的非int数据会抛异常,没有做异常处理,这个异常打印很不友好; 4、 分解质因数这个功能应该也算是一个算法,这个算法为了能够被可重复使用,需要进行封装; 5、 同理输出的方法也应该需要进行封装,题目虽然是输出道控制台,但是如果哪天需求变动,不是惨了。(该死的需求总是在变,大家应该都有体会); 6、 变量的命名:n,k谁能理解这个是什么意思啊。
下面是我对这道题解答的改进: 涉及五个类: PrimeHandle:分解质因数处理类,核心算法 Input:获取输入数据的接口 ConsoleInput:从控制台输入数据的Input接口实现 Output:输出结果的接口 ConsoleOutput:从控制台输出结果的Output接口实现 Main:客户端程序,用于执行程序
上代码: 1 public class PrimeHandle {
2 3 //用于存放结果 4 private List<Integer> results = new ArrayList<Integer>(); 5 //需要处理的数字 6 private int handleNum; 7 //最小的质子数 8 private static final int minPrime = 2; 9 10 PrimeHandle(int handleNum){ 11 this.handleNum = handleNum; 12
订阅:
博文评论 (Atom)
|
没有评论:
发表评论