JAVA集合框架
Java集合框架——图
1.图
图是一种依照键值存储元素的容器。键值类似于下标,图的键值可以使任意类型的对象。需要注意的是,图中不能存在重复的键值,每个键值都对应一个值。一个键值与其对应的值构成了一个条目,图内所存储的元素便是这个条目。集合框架中,图有三种类型,包括:散列图HashMap,链式散列图LinkedHashMap以及树形图TreeMap。这些图的通特性都定义在Map接口中。以下便是Map接口中的具体方法。
更新方法
方法 | 功能 |
void clear() | 清空图存储的所有条目 |
V put(K key,V value) | 将一个键值与值的映射添加到图中 |
V remove(Object Key) | 删除图中指定键值的条目 |
void putAll(Map m) | 将所有来自图m的条目添加到图中去 |
查询方法
方法 | 功能 |
boolean containsKey(Object Key) | 如果图包含指定键值对应的条目则返回true |
boolean containsValue(Object Value) | 将图中一个或多个键值映射到特定值返回true |
boolean isEmpty() | 若图为空则返回true |
int sieze() | 返回图中的条目个数 |
此外我们还可以通过KetSet()方法来获得一个包含图中键值的规则集,也可以使用values()方法会的一个包含图中值的集合。方法entrySet()返回一个实现Map.Entry
1.1 链式散列图
LinkedHashMap类用链表实现来扩展HashMap类,支持图中条目的排序。在LinkedHashMap中,元素既可以按照他们的插入顺序为排序方式,也可以按照它们被最后一次访问时的顺序进行排序,从最早到最晚。无参构造法是以插入顺序来创建LinkedHashMap对象的,若要按照访问顺序来创建LinkedHashMap对象,需要调用LinkedHashMap(initialCapacity, loadFactor, true)方法。
1.2 树形图
TreeMap在遍历好排序的键值对是具有很高的效率。键值可以使用Comparable接口或者Comparator接口来排序。如果使用无参构造方法创建一个TreeMap对象,假设元素实现了Comparable接口,则可以使用Comparable接口中的compareTo方法对图内的元素进行比较,并进行排序。
2. 实例:替换单词
存在一段文本需要解译,输入具体的解译信息,然后完成自动单词矫正。举例如下:
- 解译信息
解码后 | 解码前 |
from | fiwo |
hello | difh |
mars | riwosf |
earth | fnnvk |
like | fiiw |
输入START时程序读取解译信息,输入END为停止接受解译信息标志;再次输入START为输入解译文本的标志。最后输出解译后的文本内容,若输入文本中无法检索到对应解译信息的内容时,则不进行替换,直接输出文本内容具体代码如下所示。
import java.util.*;
public class hashmapTest{
public static void main(String[] args){
Map<String,String> hashmap=new HashMap<String,String>();
List<String> wordslist=new ArrayList<String>();
Scanner input=new Scanner(System.in);
Collections.addAll(wordslist,input.nextLine().split(" "));
/*输入解译信息并以START和END为标志*/
if(wordslist.get(0).compareTo("START")==0){
wordslist.clear();
boolean mark=true;
while(mark){
Collections.addAll(wordslist,input.nextLine().split(" "));
if(wordslist.get(0).compareTo("END")==0)
mark=false;
else{
hashmap.put(wordslist.get(1),wordslist.get(0));//将解译信息存放在散列图中
wordslist.clear();
}
}
}
wordslist.clear();
Collections.addAll(wordslist,input.nextLine().split(" "));
/*识别输入文本*/
if(wordslist.get(0).compareTo("START")==0){
wordslist.clear();
Collections.addAll(wordslist,input.nextLine().split(" "));
}
/*输出解译后的文本信息*/
for(int i=0;i<wordslist.size();i++){
if(hashmap.containsKey(wordslist.get(i)))
System.out.println(hashmap.get(wordslist.get(i)));
else System.out.println(wordslist.get(i));
}
}
}