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的区别:

区别点HashMapHashTable
性能异步处理同步处理
数据安全非线程安全线程安全
设置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()两个方法,以确定元素是否重复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值