java学习笔记——Map和Iterator

39 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情

Map集合类型

  • Map
    • 特点:存储键值对映射关系,根据key能找到value
  • HashMap
    • 采用Hashtable哈希表存储结构
    • 优点:添加速度快,查询速度快,删除速度快
    • 缺点:key无序
  • LinkedHashMap
    • 采用哈希表存储结构,同时使用链表维护次序
    • key有序(按照添加顺序)
  • TreeMap
    • 采用二叉树(红黑树)的存储结构
    • 优点:key有序,查询速度比list快(按照内容查询)
    • 缺点:查询速度没有HashMap快

Set和Map的关系:如果Map中只存储key,不存储value,就是对应的Set

Set就是对应Map的key的集合

一些命令

注意:key是唯一的,如果多次赋值,则新的值会覆盖旧值

key:无序,唯一,TreeSet

value:无序,不唯一,Collection

  • 创建map对象:Map<String,String> map=new HashMap<>();
  • 使用Map对象存储键值对 map.put("cn","China");
  • 使用键获取值 map.get("cn");
  • 获取长度 map.size();
  • 输出所有的key-value(相当于调用toString):System.out.println(map);
  • 输出所有的key (Set类型)System.out.println(map.keySet());
  • 输出所有的value (Collection)System.out.println(map.values());
  • map.clear();
  • map.containsKey(10);
  • map.containsValue(new Student(id:30,name:"wangwu",age:20,score:85.0;)
  • map.isEmpty();

遍历Map

Map不能直接遍历,要把它转换成Set才行

  1. 得到所有的key组成的Set
    Set<String> keySet=map.keySet();
    for(String key:keySet){
        System.out.println(key+"----->"+map.get(key));
    }
    
  2. 得到所有的Entry(就是一个哈希表或者红黑树中节点类)组成的set集合
    Set<Map.Entry<String,String>> entrySet=map.entrySet();
    Iterator <Map.Entry<String,String>>it=entrySet.iterator();
    while(it.hasNext()){
        Map.Entry<String,String> entry=it.next();
        //System.out.println(entry);
        System.out.println(entry.getKey()+":"+entry.getValue());
    }
    

Iterator

Iterator专门为遍历集合而生,实际上是迭代器设计模式的实现,集合并没有提供专门的遍历方法

常用方法

  • boolean hasNext()判断是否存在另一个可访问的元素
  • Object next()返回要访问的下一个元素
  • void remove()返回上次访问返回的对象

那些集合可以使用Iterator遍历

  • Coolection,List,Set可以,Map不可以
  • 提供iterator()方法的就可以将元素交给Iterator
  • 实现Iterator解耦的集合类都可以使用迭代器遍历

for-each循环和Iterator的联系

  • for-each循环(遍历集合)时,底层用的是Iterator
  • 凡是可以使用for-each的肯定也能使用Iterator进行遍历

for-each循环和Iterator的区别

  • for-each还能遍历数组,for-each循环和Iterator的联系只能遍历集合
  • 使用for-each遍历集合时不能删除元素,会抛出异常,使用Iterator可以删除