前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难。不管了,工作三年之后就当给自己放个暑假。
面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的文章,大多都是以罗列记忆点的形式书写的,没有谈论实现细节和逻辑原理。作为个人笔记无可厚非,但是并不利于他人学习。希望能通过这种比较“费劲”的讲解,帮助我自己、也帮助读者们更好地学习Java、掌握Java.
无论你跟我一样需要应聘,还是说在校学生学习Java基础,都对入门和进一步启发学习有所帮助。(关于Collection已经写过一篇文章,可以在本文最后点击链接阅读)。
1.3 拒绝重复内容的Set
Set,跟数学中的概念“集合”是一样的,就是没有重复的元素。在JavaSE的Cellection框架里,Set是三大阵营之一。根据“核心框架图”,我们可以看到它的位置。
同样一张订单,已经支付过一次就不能再次支付,否则就是重复支付。反映在系统当中,就是收集对象时,如果有相同的对象,则不再重复收集。如果有这类需求,我们可以用使用实现Set接口的类。之前讲过的List和之后会谈到的Queue,都对是否重复没有要求,这是Set的特性。
1.3.1 如何使用HashSet
除非已经是大小牛级别的人能做到触类旁通,否则最好在学习API的时候做几个简单的实验,不仅可以更实际地帮助理解,还可以加深印象有助于长期记忆。
输入一段英文,经过处理后需要输出所有不重复的单词。HashSet实现了Set接口,我们不妨就用它来写一段demo。
1 import java.util.*;2
3 /**
4 * HashSet的实验用例5 */
6 public classWords {7 public static voidmain(String[] args) {8 Scanner scanner = newScanner(System.in);9 System.out.print("请输入一段话:");10 String line =scanner.nextLine();11 String[] tokens = line.split(" ");//根据空格划分单词
12 Set words = newHashSet();13 for(String token : tokens) {14 words.add(token);//使用HashSet收集单词
15 }16 System.out.printf("不重复的单词有:%d 个: %s%n", words.size(), words);17 }18 }
英语中分词没有中文分词那么困难,基本上可以按照空格来划分单词。很明显,输出的结果是正确的。
这时候不知道你是否也有这么一个疑问:HashSet是如何判断哪些单词重复的呢?如果让你来做,你会怎么做?
1.3.2 Java中判断重复对象的规范
如果对象是字符串,我们可以采用逐一比较的方式,比较即将收集的字符串和已有的字符串是否相同;如果对象是数值,那就更简单了。可是,除此之外的对象怎么办?我们先来看一个没那么复杂的例子。</