Map接口及其实现类

Map接口及其实现类

  • Map是用来存储”键/值“对的对象,再Map中存储的关键字和值都必须是对象
  • 并要求关键字是唯一的,而值可以重复
  • Map接口常用的实现类有HashMap,TreeMap,HashTable,LinkedHashMap
  • 下面介绍HashMap类的实现
import java.util.*;

/**
 * Map是用来存储”键/值“对的对象,再Map中存储的关键字和值都必须是对象
 * 并要求关键字是唯一的,而值可以重复
 * Map接口常用的实现类有HashMap,TreeMap,HashTable,LinkedHashMap
 * 下面介绍HashMap类的实现
 */
public class MapDemo {
    public static void main(String[] args){
        String [] country = {"China","India","Australia","germany","Cuba","greece","Japan"} ; //存放国家名的数组
        String [] capital = {"Beijing","New Delhi","Canberra","Berlin","Havana","Athens","Tokyo"} ; //存放首都名的数组
        Map<String,String> m = new HashMap<>() ;
        for(int i=0; i<country.length; i++){
            m.put(country[i],capital[i]) ;
        }
        System.out.println("共有" + m.size() + "个国家") ;
        Set<String> set = m.keySet() ; //返回由键组成的set对象
        List<String> list = new ArrayList<>(set) ; //转换成List对象
        for(String s : list){
            System.out.print(s + " ") ;//输出国家名
        }
        System.out.println() ;
        m.put("America","New York")  ; //向集合中添加键值对
        System.out.println(m.get("China")) ; //返回键China对应的值
        m.remove("India") ;//从集合中删除指定键值对
        System.out.println(m) ; //打印集合
        System.out.println(m.containsKey("China")) ; //判断集合是否包含指定的键
        System.out.println(m.containsValue("Beijing")) ; //判断集合是否包含指定的值
        System.out.println(m.isEmpty()) ; //判空操作
        Collection col = m.values() ; //返回由值组成的Collection对象
        Iterator iterator = col.iterator() ;
        while(iterator.hasNext()){ //迭代器方式输出值
            System.out.print(iterator.next() + " ") ;
        }

    }
}

  • TreeMap类实现类SortedMap接口,保证Map中的键值对按关键字升序排列
    *下面在D盘创建名为proverb的文本文件,文件内容如下:
    no pains, no gains.
    well begun is half done.
    where there is a will , there is a way.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;

/**
 * TreeMap类实现类SortedMap接口,保证Map中的键值对按关键字升序排列
 *
 */
public class TreeMapDemo {
    public static void main(String[] args) throws IOException { //抛出I/O异常
        String line = null ;
        String [] words = null ;
        Map<String, Integer> m = new TreeMap<>() ;
        //创建文件输入流
        BufferedReader br = new BufferedReader(new FileReader("D:\\proverb.txt")) ;
        while((line = br.readLine()) != null){ //每行不为空则循环
            words = line.split("[,.]") ; //将每一行解析成字符串数组
            for(String s : words){
                Integer count = m.get(s) ; //返回对应键的值
                if(count == null){ //表示s不在集合m中
                    m.put(s,1) ;
                }
                else{
                    m.put(s,count+1) ;
                }
            }
            System.out.println("共有" + m.size() + "个不同的单词") ;
            System.out.println(m) ;
        }

    }
}
  • HashTable是Java早起版本提供的一个存放键值对的实现类,
  • 实现一种散列表,也属于集合框架,HashTable的方法都是同步的,因为它是线程安全的
  • 任何非null对象都可以作为散列表的关键字和值
  • 但是要求作为关键字的对象必须实现hasCode()方法和equals()方法,以使对象的比较成为可能
  • HashTable类的keys()方法和elements()方法的返回类型都是Enumeration接口类型的对象
  • 通过该接口的hasMoreElements()方法和nextElement()方法可以对枚举对象元素进行迭代

import java.util.Enumeration;
import java.util.Hashtable;

/**
 * HashTable是Java早起版本提供的一个存放键值对的实现类,
 * 实现一种散列表,也属于集合框架,HashTable的方法都是同步的,因为它是线程安全的
 * 任何非null对象都可以作为散列表的关键字和值
 * 但是要求作为关键字的对象必须实现hasCode()方法和equals()方法,以使对象的比较成为可能
 * HashTable类的keys()方法和elements()方法的返回类型都是Enumeration接口类型的对象
 * 通过该接口的hasMoreElements()方法和nextElement()方法可以对枚举对象元素进行迭代
 *
 */
public class HashTableDemo {
    public static void main(String[] args){
        Hashtable<Integer, String> numbers = new Hashtable<>() ;
        numbers.put(new Integer(1), "one") ;
        numbers.put(new Integer(2), "two") ;
        numbers.put(new Integer(3), "three") ;
        System.out.println(numbers.get(2)) ;//返回键2对应的值
        //调用Hashtable的elements()方法返回包含值Enumeration的对象
        Enumeration<String> values = numbers.elements() ;
        while(values.hasMoreElements()){
            System.out.print(values.nextElement() + " ") ;
        }
        for(Integer m :numbers.keySet()){ //打印键
            System.out.print(m + " ") ;
        }
        for(String n : numbers.values()){ //打印值
            System.out.print(n + " ") ;
        }
        //使用lambada表达式输出键值对
        numbers.forEach((k,v) -> System.out.println(k + " " + v)) ;

    }
}

  • 集合转换,集合实现类的构造方法一般都接受一个Collection对象
  • 可以将Collection转换成不同类型的集合
  • 下面介绍的是将Queue对象转换成List对象,再将 List对象转换成Set对象
import java.util.*;

/**
 * 集合转换,集合实现类的构造方法一般都接受一个Collection对象
 * 可以将Collection转换成不同类型的集合
 * 下面介绍的是将Queue对象转换成List对象,再将 List对象转换成Set对象
 */
public class ConvertDemo {
    public static void main(String[] ars){
        Queue<String> queue = new LinkedList<>() ; //Queue对象实例化
        queue.add("Hello") ;
        queue.add("World") ;
        List <String> list = new ArrayList<>(queue) ; //将Queue对象转换成List对象
        for(String u : list){ //增强for循环打印集合元素
            System.out.print(u + " ") ;
        }
        Set<String> set = new HashSet<>(list) ; //将List对象转换成Set对象
        Iterator iterator = set.iterator() ;
        while(iterator.hasNext()){ //使用迭代器方式输出集合元素
            System.out.print(iterator.next() + " ") ;
        }


    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nuist__NJUPT

给个鼓励吧,谢谢你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值