【Java基础18_1】Map集合

引子

  • 班级中有很多学生,有可能出现姓名和年龄也一样的人。如表:
姓名年龄
张三20
张三20


上面的这种情况,有可能是用户输入失误导致插入的数据出现重复,也有可能这两个人只是恰巧同名同姓而已,实际上根本不是同一个人。

  • 此时,单单用姓名无法保证插入数据的唯一性,因此采取以下措施:

    1. 用ID保证
    2. 在1的基础同时用姓名保证
  • Map一个键对应存储的一个值。

Map 与Collection集合的区别

  1. Map集合是双列集合,Collection集合是单列的。
  2. Map集合是靠键来保证元素唯一,Map集合的键相当于Set集合,能够保证元素唯一。值不唯一,Map集合的值相当于Collection集合的List接口。
  3. Map集合保证元素唯一只针对键有效。而Set集合保证元素唯一。
    • 通过查看API,发现 Map 集合是一个接口:
    • 接口 Map<K ,V >
    • K表示键的类型
    • V表示值的类型

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

Map与Collection内存原理

基本方法

方法名功能
V put ( K key , V Value);将一个键值对添加到集合中
如果没有这个键,就添加到这个集合中并返回null;
如果已经有了这个键,那么就将这个键的值给替换,返回被替换的值。
V remove ( K key );根据键删除元素,并返回被删除元素的值。
void clear ( );清空集合
boolean containsKey ( Object key);判断是否包含key键
boolean contiansValue ( Object value);判断是否包含value值
boolean isEmpty ( );判断Map是否为空
int size ( );返回键值对个数


获取相关功能

方法名功能
V get ( Object key );根据键获取值
Set keySet();获取所有键的Set集合
Collection values ( );获取所有值的Collection集合


Map 的遍历

  1. 先获取所有的键的Set集合,然后根据键获取值。
    此方式遍历含自定义类的Map源码
  2. Map存储的是一个个键值对对象,可以将键值对看成一个对象,遍历键值对对象再获取其值。
    • 这个键值对对象在Java中叫Entry,这个对象封装了键的信息和值的信息。因此Entry应该有对应方法获取这个对象的键和值。
      1. 获取键值对对象的Set集合。
      2. 遍历键值对对象的Set集合,获取每一个键值对对象。
      3. 根据键值对对象获取键和值。
        此方式遍历含自定义类的Map源码
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
 * 有关Map遍历普通String类型的Demo
 * 方式1:先获取所有的键的Set集合,然后根据键获取值。
 */
public class MapTrversalDemo {

    public static void main(String[] args) {

          //创建Map集合
          Map<String,String> map = new HashMap<>();

          //往Map集合里添加元素
          map.put("001","张三");
          map.put("002", "李四");
          map.put("003", "王五");
          map.put("004", "赵六");

          //步骤一:获取Map集合里所有的键值
          Set<String> keySet = map.keySet();

          //打印输出格式
          System.out.println("编号\t姓名");

          //根据键值获取值并打印输出
          for (String keys : keySet) {
            System.out.println(keys+"\t"+map.get(keys));
        }       

    }

}
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/*
 * 有关Map的遍历
 * 方法2:
 *     Map是由多个保存了键和值的键值对的Entry对象组成的,可以遍历这些Entry对象,再通过Entry分别获取键和值。
 *
 */
public class MapTrversalEntryDemo {

    public static void main(String[] args) {

            //创建Map对象
            Map<String,String> map = new HashMap<>();

            //在map中添加元素
            map.put("001", "田馥甄");
            map.put("002", "陈粒");
            map.put("003", "谢春花");
            map.put("004", "银临");

            //打印输出标题
            System.out.println("\t编号\t歌手");

            //1. 获取键值对对象Entry的Set集合
            Set<Entry<String, String>> entrySet = map.entrySet();

            //2. 遍历键值对对象的Set集合,获取每一个键值对对象
            for (Entry<String, String> entry : entrySet) {
                //3. 根据键值对对象获取键和值
                System.out.println("\t"+entry.getKey()+"\t"+entry.getValue());
            }



    }

}

Entry图解

  • 注意EnrtyMap内部类,API应当在 Map 类中的嵌套类中查询。

图解如下:

Map.Entry的相关方法

方法名功能
K getKey ( )返回与此项对应的键。
V getValue ( )返回与此项对应的值。
boolean equals ( Object o )比较指定对象与此项的相等性。
int hashCode ( )返回此映射项的哈希码值。
V setValue ( V value )用指定的值替换与此项对应的值(可选操作)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值