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=阿卡丽
原文地址:https://www.cnblogs.com/ibear/p/12905669.html