zoukankan      html  css  js  c++  java
  • Map集合

    一、Map集合:以键(key)-值(value)映射的形式,将数据保存到集合中,键和值保存的是对象的内存地址,键不允许重复,

              如果已经存在一个键-值,再插入相同的键,则会覆盖已存在的键的所对应值


     

    二、HashMap的数据结构

    1、HashMap集合底层是哈希(散列)表的数据结构

    2、哈希表是一个怎么样的数据结构呢?

          哈希表是一个数组和单链表的结合体

          数组:在查询方面效率很高,增加和删除方面效率很低

          单向链表:在随机增加删除方面效率更高

      


     

    三、map集合常用的方法:

    size() 判断map集合的长度,即键值对的个数,返回值为int型
    isEmpety() 判断该集合是否为空,返回值是Boolean类型
    clear() 清除map集合中的所有键值对
    containsKey(Object key) 判断map集合中是否有该键,返回值类型为Boolean
    containsValue(Object value) 判断map集合中是否有该值,返回值类型为Boolean
    get(Object key) 通过get方法,获取键key获取所对应的value值,返回值类型是value(值)的数据类型
    keySet() map集合中键是不允许重复的,set集合中元素也是不允许重复的,该方法获取map集合中的所有键,并存入Set集合中,Set集合的类型是键的数据类型
    entrySet() 该方法获取map集合中的所有键-值,并存入Set集合中:Set{key1=value1,...,keyn=valuen},Set集合的类型是键和值的数据类型:Set<Map.entry<key的数据类型,value的数据类型>>
    remove(object key) 从map集合中删除key所对应的键值对
    values() 获取map集合中所有的value(值),并放入Collection集合中,集合类型由value的数据类型决定
    put(key,value) 往map集合中放入键值对,其中key和value的数据类型,要和map集合定义时的键值类型要一致

    putall(Object map-b)

    将一个map-p复制到map集合中

    package daily;
    
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    public class maptest {
        public static void main(String[] args) {
            HashMap<Integer,String> map1 = new HashMap<>();//定义HashMap集合,且HashMap的数据类型是包装类型,或者应用数据类型
            HashMap<Integer,String> map2 = new HashMap<>();
            map1.put(1,"亚索");
            map1.put(1,"快乐风男");//当键已经存在集合中,再插入重复的键时,值会进行覆盖,即快乐风男会覆盖亚索
            map1.put(2,"盲僧");
            map1.put(3,"石头人");
            map2.put(5,"火影劫");
            map2.put(6,"诡术妖姬");
            map2.put(7,"阿卡丽");
            System.out.println(map1.size());
            System.out.println(map1.isEmpty());
            System.out.println(map1.containsKey(1));
            System.out.println(map1.containsValue("快乐风男"));
            System.out.println(map1.get(2));
            System.out.println(map1.keySet());
            System.out.println(map1.values());
            System.out.println(map1.entrySet());
            System.out.println(map1.remove(1));//删除map1中,key为1所对应的键值对
            System.out.println(map1.entrySet());
            System.out.println(map1.put(4,"英雄联盟"));
            map1.putAll(map2);//将map2复制到map1中
            System.out.println(map1.entrySet());
        }
    }
    
    运行结果:
    3
    false
    true
    true
    盲僧
    [1, 2, 3]
    [快乐风男, 盲僧, 石头人]
    [1=快乐风男, 2=盲僧, 3=石头人]
    快乐风男
    [2=盲僧, 3=石头人]
    null
    [2=盲僧, 3=石头人, 4=英雄联盟, 5=火影劫, 6=诡术妖姬, 7=阿卡丽]

     


    四、Map集合的三种遍历方式:

    map集合是数组和链表的结合体,所以不能直接借助Iterator迭代器进行遍历,一般采用两种遍历方式:

    package daily;
    
    import java.util.*;
    
    public class maptest {
        public static void main(String[] args) {
            HashMap<Integer,String> map1 = new HashMap<>();//定义HashMap集合,且HashMap的数据类型是包装类型,或者应用数据类型
            map1.put(1,"亚索");
            map1.put(2,"快乐风男");
            map1.put(3,"盲僧");
            map1.put(4,"石头人");
            map1.put(5,"火影劫");
            map1.put(6,"诡术妖姬");
            map1.put(7,"阿卡丽");
            //方式一:直接通过keySet()方法获取map集合中所有的键,并放入到Set集合中,再通过迭代器Iterator或者foreach循坏进行遍历
           Set<Integer> s = map1.keySet();//set集合的类型和键的类型要一致
            //a.通过迭代器Iterator进行遍历
            Iterator<Integer> i= s.iterator();
            while(i.hasNext())
            {
                int j = i.next();
                String k=map1.get(j);//通过get()方法,利用键获取值
                System.out.println(j+"="+k);
            }
            System.out.println('
    ');
            //b.通过foreach循环进行遍历
            for(Integer S: s){
                String k = map1.get(S);
                System.out.println(S+"="+k);
            }
            System.out.println('
    ');
            //方式二:通过entrySet获取map集合中的所有键值对,并放入到Set集合中,Set集合的类型是Set<Map.Entry<键的数据类型,值得数据类型>>,
        再通过foreach循环遍历,这种方式的使用频率比较高,因为获取key-value都是直接从链表的节点对象获取的,适用于数据量比较大的key-value的时候
    Set<Map.Entry<Integer,String>> s1 = map1.entrySet(); for (Map.Entry<Integer,String> S:s1) { System.out.println(S); } } } 运行结果: 1=亚索 2=快乐风男 3=盲僧 4=石头人 5=火影劫 6=诡术妖姬 7=阿卡丽 1=亚索 2=快乐风男 3=盲僧 4=石头人 5=火影劫 6=诡术妖姬 7=阿卡丽 1=亚索 2=快乐风男 3=盲僧 4=石头人 5=火影劫 6=诡术妖姬 7=阿卡丽
  • 相关阅读:
    Haskell Interactive Development in Emacs
    Access Java API in Groovy Script
    手工设置Eclipse文本编辑器的配色
    Color Theme of Emacs
    Gnucash的投资记录
    Special Forms and Syntax Sugars in Clojure
    Use w3m as Web Browser
    SSE指令集加速之 I420转BGR24
    【图像处理】 增加程序速度的方法
    TBB 入门笔记
  • 原文地址:https://www.cnblogs.com/ibear/p/12905669.html
Copyright © 2011-2022 走看看