个值,但是其对应的键并不在映射中,会如何? 如果试图查找一个值,但是其对应的键并不在映射中,会如何? 如何能知道一个映射中存储条目的数量? 如何能知道一个映射中存储条目的数量?
使用映射表示关联
在TechSupport系统中使用映射 系统中使用映射
使用已知的单词作为键,而其对应的回答作为值, 使用已知的单词作为键,而其对应的回答作为值,将问题与特定 的回答联系在一起,使程序能够根据
问题产生一个相关的回答。 的回答联系在一起,使程序能够根据问题产生一个相关的回答。 修改程序中的Responder类。 修改
程序中的 类
进一步改进
如果用户只是输入单个单词而不是整个句子, 如果用户只是输入单个单词而不是整个句子,将回答与某个单词关联起 来就很容易。 来就很容易。 如果用户可以输入句子,如何查找句子中所有的单词可能对应的回答? 如果用户可以输入句子,如何查找句子中所有的单词可能对应的回答? 如何将句子分割成单词? 如何将句子分割成单词? 如何使用集合? 如何使用集合?
使用集合
集合
集合( )是一种容器, 集合(Set)是一种容器,其中存储的每个不同的元素 只出现一次,并且元素的排列没有任何特定的顺序。 只出现一次,并且元素的排列没有任何特定的顺序。 Set是java.util包中的接口。 包中的接口。 是 包中的接口 HashSet类实现了 接口。 类实现了Set接口 类实现了 接口。 HashSet的使用和 的使用和ArrayList的使用几乎没什么区别。 的使用几乎没什么区别。 的使用和 的使用几乎没什么区别 中使用不同种类的容器的方法都是相似的。 在Java中使用不同种类的容器的方法都是相似的。区 中使用不同种类的容器的方法都是相似的 别只在于每个容器不同的功能。 别只在于每个容器不同的功能。
使用集合
Java中的容器类型 中的容器类型
集合( ):不区分元素的顺序,不允许出现重复元素; ):不区分元素的顺序 集合(Set):不区分元素的顺序,不允许出现重复元素; 列表( ):
列表会保持元素加入时的顺序 列表(List):列表会保持元素加入时的顺序,以索引的方式提 ):列表会保持元素加入时的顺序, 供对元素的访问,允许包含重复元素; 供对元素的访问,允许包含重复元素; 映射( ):保存成对的 映射(Map):保存成对的“键-值”信息,映射中不能包含重 ):保存成对的“ 值 信息, 复的键,每个键最多只能映射一个值。 复的键,每个键最多只能映射一个值。
理解不同的容器类型: 理解不同的容器类型:
容器名字的第二个单词更好地表达容器存储什么样的数据; 容器名字的第二个单词更好地表达容器存储什么样的数据; 容器名字的第一个单词则表明容器如何存储数据。 容器名字的第一个单词则表明容器如何存储数据。
使用集合
Java容器相关 容器相关API关系结构 容器相关 关系结构
HashSet Set Collection List TreeSet ArrayList Vector HashMap Map Hashtable TreeMap java.util.Collections Enumeration StringTokenizer Properties java.util.Arrays Stack
分割字符串
String类的 类的split方法 类的 方法
public String[] split( String regex) 根据给定的正则表达式的匹配来拆分当前字符串。 根据给定的正则表达式的匹配来拆分当前字符串。将拆分得到
的 字符串保存在一个字符串数组中返回, 字符串保存在一个字符串数组中返回,结果数组中不包括结尾空 字符串。 字符串。
public HashSet
getInput() { …… String inputLine = reader.nextLine().trim().toLowerCase(); String[] wordArray = inputLine.split(" "); HashSet words = new HashSet(); HashSet words = for(String word : wordArray) { new HashSet(Arrays.asList(wordArray)); words.add(word); } return words; }
完成TechSupport系统 系统 完成
改进Responde