java中的Map集合

java中的Map集合

除了我们之前所学习的Collection集合之外,还有Map集合,它是一个接口,Map集合是用键(key)存储元素的容器,键是不能重复的,如果重复就会被替换掉,但是值(value)可以重复,每个键都对应一个值,具有键值对映射关系,Map要保证唯一性,Map集合主要包含了3个实现类,HashMap、TreeMap和LinkedMap。让我们来看看吧

集合框架图

Interface Map<K,V> K:键的类型;V:值的类型
将键映射到值的对象,不能包含重复的键;每个键可以映射到最多一个值

Map集合的特点:

1.键值对映射关系。

2.键不能重复。

3.元素的存取无序。

4.一个键只能对应一个值。

常用方法

在这里插入图片描述

public class MapDemo02 {
    public static void main(String[] args) {
    //创建集合对象
        Map<String,String> map=new HashMap<String,String>();

        //V put(K key, V value): 添加元素。
        map.put("张无忌","赵敏");
        map.put("郭靖","黄蓉");
        map.put("杨过","小龙女");


        //V remove(Object key): 根据键删除值对元素
//        System.out.println(map.remove("郭靖"));
//        System.out.println(map.remove("郭襄"));//没有键对应的值返回null

       //  void clear():移除所有的键值元素
        //map.clear();

        //boolean containsKey(Object key):判断集合是否包含指定的键
//        System.out.println(map.containsKey("郭靖"));
//        System.out.println(map.containsKey("郭襄"));

        //boolean isEmpty():判断集合是否为空
        //System.out.println(map.isEmpty());

        //int size():集合的长度,也就是集合中键对的个数
        System.out.println(map.size());

        //输出集合对象
        System.out.println(map);

Map集合的遍历方式:

Map集合的遍历(方式1):
1.获取所有值的集合,用KeySet()方法实现
2.遍历键的集合,获取到每一个键,用增强for循环实现
3.根据键去找值,用get(Object key)方法实现

 //获取所有值的集合,用KeySet()方法实现
        Set<String> keySet = map.keySet();

        //遍历键的集合,获取到每一个键,用增强for循环实现
        for(String key: keySet){
          //根据键去找值,用get(Object key)方法实现
            String value = map.get(key);
            System.out.println(key+","+value);

Map集合的遍历(方式2):
1.获取所有键值对对象的集合
Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
2.遍历键值对对象的集合,得到每一个键值对对象
用增强for实现,得到每一个Map.Entry
3.根据键值对对象获取键和值
用getKey()得到键
用getValue()得到值

// 获取所有键值对对象的集合
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        //遍历键值对对象的集合,得到每一个键值对对象
        for(Map.Entry<String,String> me:entrySet){
        //根据键值对对象获取键和值
            String key = me.getKey();
            String value = me.getValue();
            System.out.println(key+","+value);

1、HashMap

HashMap底层哈希表数据结构,和HashSet一样,是用哈希表实现,所以无序,线程是不同步的,可以存入null键和null值,要保证它的唯一性,就需要重写HashCode()Equals()方法(自动生成即可)HashMap是经常用到的。

有两种遍历方式:

方式1:键找值
方式2:键值对对象找键和值

     //遍历集合
        //方式1:键找值
        Set<String> keySet = hm.keySet();
        for(String key: keySet){
            Student value = hm.get(key);
            System.out.println(key+","+value.getName()+","+value.getAge());
        }
        System.out.println("--------");

        // 方式2:键值对对象找键和值
        Set<Map.Entry<String, Student>> entrySet = hm.entrySet();
        for(Map.Entry<String,Student>me : entrySet){
            String key = me.getKey();
            Student value = me.getValue();
            System.out.println(key+","+value.getName()+value.getAge());
        }
    }
}

在JDK1.8以前是通过数组和链表实现,在JDK1.8以后(阈值大于8),为解决哈希冲突,用数组加链表加红黑树(结点只有两种颜色,非黑即白)表示,红黑树是二叉查找树的一种,是有序的树形结构。

2、TreeMap

TreeMap底层是二叉树数据结构,可以通过比较器对Map中的键进行排序。

两种排序(参照之前所学的TreeSet):

1.自然排序Comparable:

无参构造采用的是自然排序,重写Comparator()方法

2.比较器排序Comparator:

带参构造犯法使用的是比较器排序对元素进行排序的
比较器排序,就是让集合构造方法接受Comparator的实现类对象,重写compare(To1,To2)方法

3、LinkedMap

我们来简单说一下LinkedMap吧,底层是链表加数组(迭代顺序),是一个有序的集合存取元素的顺序是一致的。

4、Collections

Collections是一个包装类,是针对集合操作的工具类,包含各种有关集合的静态多态方法,不能实例化服务于Collection框架,提供一系列静态方法实现对各种集合的搜索、排序和线程安全。

常用方法
在这里插入图片描述

public class CollectionsDemo01 {
    public static void main(String[] args) {
        //创建集合对象
        List<Integer> list = new ArrayList<Integer>();

        //添加元素
        list.add(30);
        list.add(20);
        list.add(50);
        list.add(10);
        list.add(40);

        //public static <T extends Comparable<? super T>> void sort(List<T> list):将指定的列表按升序排序
//        Collections.sort(list);

        //public static void reverse(List<?> list):反转指定列表中元素的顺序
//        Collections.reverse(list);

        //public static void shuffle(List<?> list):使用默认的随机源随机排列指定的列表
        Collections.shuffle(list);

        System.out.println(list);
    }
}

Collection和Collections的区别
Colection:
Colection是一个接口,有List和Set两个子接口,提供了集合对象进行基本操作的通用接口方法,在java类库中有许多具体实现,Collection接口的具体意义式危重症具体集合提供了最大化的统一操作方式。

Colections:
Colections是一个工具类,不能实例化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值