JAVA集合框架——图

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. 实例:替换单词

存在一段文本需要解译,输入具体的解译信息,然后完成自动单词矫正。举例如下:

  • 解译信息
解码后解码前
fromfiwo
hellodifh
marsriwosf
earthfnnvk
likefiiw

输入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));
    }   
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值