Java类集框架(五):偶对象保存:Map接口

Map集合可以保存一对关联数据(按照“key = value”的形式)。

Map接口的常用方法

方法 类型 描述
public V put(K key, V value) 普通 向集合中保存数据
public V get(Object key) 普通 根据key查找对应的value数据
public Set<Map.Entry<K, V>> entrySet() 普通 将Map集合转化为Set集合
public Set<K> keySet() 普通 取出全部的key

Map接口的两个常用子类:HashMap、Hashtable。

HashMap子类的使用

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

public class TestHashMap {

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<String, Integer>();
        //出现key重复的情况,就会使用新的数据替换已有数据。
        map.put("a", 1);
        map.put("b", 2);
        map.put("c", 3);
        map.put("d", 4);
        map.put(null, 5);
        map.put("f", null);
        System.out.println(map);
    }
}
//程序的执行结果为:{null=5, a=1, b=2, c=3, d=4, f=null}

上例利用HashMap实现了Map集合最基础的数据保存操作。通过此例可以看出Map如下特点:

  • 使用HashMap定义的Map集合是无序存放的;
  • 如果发现了重复的key会进行覆盖,使用新的内容替换旧的内容;
  • 使用HashMap子类保存数据时key和value均可取null

PS:Map与Collection的区别
Map和Collection都可以保存动态长短的数据,其本质的区别在于使用的环境。

  • Collection :利用Iterator接口输出数据。
  • Map:实现用过key查找value的字典功能。

HashMap与HashTable的区别:

区别点 HashMap HashTable
性能 异步处理 同步处理
数据安全 非线程安全 线程安全
设置null 允许key或value内容为null 不允许设置null

利用Iterator输出Map集合

这里写图片描述
由此可知,Collection集合保存数据时所有对象是直接保存的,而Map集合保存数据时,所保存的key和value会自动包装成为Map.Entry接口对象。如果利用Iterator进行迭代,那么next()方法所返回的数据是一个Map.Entry接口对象,如下定义。
public static interface Map.Entry<K, V>{}
该接口定义的常用方法如下:

方法 类型 描述
public K getKey() 普通 取得数据中的key
public V getValue() 普通 取得数据中的value
public V setValue() 普通 修改数据中的value

Map接口中定义了一个方法:public Set<Map.Entry<K, V>> entrySet()
使用此方法输出Map集合的操作如下:

  1. 利用entrySet()方法将Map接口数据中的数据转换为Set接口实例进行保存。
  2. 利用Set接口中的iterator()方法将Set集合转换为Iterator接口实例。
  3. 利用Iterator接口进行迭代输出。

利用Iterator实现Map接口输出

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

public class TestOutput {

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("a", 1);
        map.put("b", 2);
        map.put("c", 3);
        map.put("d", 4);
        // 将Map集合转换为Set集合,以使用itertor()方法,注意泛型统一
        Set<Map.Entry<String, Integer>> set = map.entrySet();
        //取得Iterator接口实例
        Iterator<Map.Entry<String, Integer>> iterator = set.iterator();
        while (iterator.hasNext()) {
            //每一次迭代取得的都是Map.Entry接口实例,以进行key和value的分离
            Map.Entry<String, Integer> me = iterator.next();
            System.out.println(me.getKey() + "--->>" + me.getValue());
        }
    }
}

自定义Map集合的key类型

作为key的自定义的类必须覆写hasCode()和equals()两个方法,以确定元素是否重复。

猜你喜欢

转载自blog.csdn.net/MeowingCat/article/details/80203032