1.Map(K,V)

元素是成对存在的,一个键(K)对应一个值(V).
Map集合中K与V的数据类型可以相同也可以不同
Map集合中,K不允许重复,V可以重复

2.HashMap集合

底层是哈希表(查询速度特别快)
是一个无序集合,存储元素和取出元素的顺序可能不一样
key不允许重复,无序

3.LinkedHashMap集合

底层是哈希表+链表,保证元素有序
key不允许重复,有序

4.Map接口的常用方法

  public V put(K key , V value); 把指定的键与指定的值添加到Map集合
  返回值 V :
           储存键对的时候,key不重复,返回值v是null
           储存键对的时候,key重复,会使用新的value替换map中重复的value,返回替换的value值
  public V remove(Object key);   把指定的键所对应的值在map集合删除,返回该删除元素的值
  返回值 V :
           key存在,V返回该元素的值
           key不存在,V返回null
  public V get(Object key);      根据指定的值,在Map集合中获取对应的值
  返回值 V :
           key存在,返回该元素的值
           key不存在,返回null
  boolean containsKey(Object key); 判断集合中是否包含指定的键
  包含返回true,不包含返回false.

例:

  import java.util.HashMap;
  import java.util.Map;

  public class Test {
    public static void main(String[] args) {
        demo();
    }

    private static void demo() {
        Map <String,Integer> map = new HashMap<>();
        map.put("张无忌",178);
        map.put("鹰王",188);
        map.put("周芷若",148);
        map.put("赵敏",168);
        System.out.println(map);

        map.remove("鹰王");
        System.out.println(map);

        Integer it = map.get("赵敏");
        System.out.println(it);

        boolean b = map.containsKey("张无忌");
        boolean b1 = map.containsKey("小昭");
        System.out.println("张无忌:"+b+'\n'+"小昭:"+b1);

        if (map.containsKey("青翼蝠王")){
            map.remove("张无忌");
        }
        else
            {
                map.put("青翼蝠王",200);
            }
        System.out.println(map);
    }
  }

5.Map集合遍历键找值方式

  • Set keySet() :把Map集合中所有的key取出来存到Set集合中
  • 使用迭代器/增强for遍历Set集合,获取每一个key
  • 通过get(key)方法获取value

例:

  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  import java.util.Set;

  public class Test {
    public static void main(String[] args) {
        demo();
    }

    private static void demo() {
        Map <String,Integer> map = new HashMap<>();
        map.put("张无忌",178);
        map.put("鹰王",188);
        map.put("周芷若",148);
        map.put("赵敏",168);

        //迭代器方法
        Set<String> set = map.keySet();
        Iterator<String> ie = set.iterator();
        while (ie.hasNext())
        {
            String s = ie.next();
            Integer i = map.get(s);
            System.out.println(s+":"+i);
        }

        System.out.println("----------------------------");

        //增强for
        for (String s : set) {
            Integer i = map.get(s);
            System.out.println(s+":"+i);
        }
    }
  }

6.通过Entry键值对对象遍历

Map.Entry<K,V>
作用:当map集合一创建,那么就会在map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)
Set <Map.Entry<K,V>> entrySet()
作用:把Map集合内部的多个Entry对象取出来,存储到一个Set集合中
遍历步骤:

  • 使用entrySet()方法把Map集合内部的多个Entry对象取出来,存储到一个Set集合中
  • 遍历Set集合,获取每一个对象
  • 通过Entry中的getKey(),getValue()方法获取键与值

例:

  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  import java.util.Set;

  public class EntryTest {
    public static void main(String[] args) {
        demo();
    }

    private static void demo() {
        Map<String,Integer> map = new HashMap<>();
        map.put("张无忌",178);
        map.put("鹰王",188);
        map.put("周芷若",148);
        map.put("赵敏",168);

        //通过迭代器
        Set<Map.Entry<String, Integer>> en = map.entrySet();
        Iterator<Map.Entry<String, Integer>> it = en.iterator();
        while (it.hasNext())
        {
            Map.Entry<String, Integer> n = it.next();
            String key = n.getKey();
            Integer value = n.getValue();
            System.out.println(key+":"+value);
        }

        System.out.println("----------------------------------");

        //通过增强for
        for (Map.Entry<String, Integer> entry : en) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+":"+value);
        }
    }
  }

7.Hashtable集合

特点:底层是一个哈希表,是一个单线程(线程安全)的集合,速度慢
之前学的所有集合都可以存储null值,但Hashtable不能存储null值

Last modification:May 29th, 2020 at 01:48 pm
如果觉得我的文章对你有用,请随意赞赏