栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Map与Set的使用及区别详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Map与Set的使用及区别详解

1.Map的使用 1.1关于Map的说明

Map是一个接口类,该类没有继承自Collection,该类中存储的是结构的键值对,并且Key一定是唯一的,不能重复。

1.2关于Map.Entry的说明

Map.Entry 是Map内部实现的用来存放键值对映射关系的内部类,该内部类中主要提供了的获取,value的设置以及Key的比较方式
注意:Map.Entry并没有提供设置Key的方法

1.3Map常用方法

注意:

  1. Map是一个接口,不能实例化对象,如果要实例化对象只能实例化其实现类TreeMap或HashMap
  2. Map中存放键值对的Key是唯一的,Value是可以重复的
  3. 在Map中插入键值对时,key只能有一个null,如果插入两个,前一个会被覆盖。但是TreeMap不可以为null,否则会抛出异常。
  4. Map中的Key可以分离出来,存储到Set中进行访问(因为Key不能重复)
  5. Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)
  6. Map中键值对的Key不可以被修改,Value可以被修改。如果要修改Key,先删除再重新添加
  7. TreeMap和HashMap的区别
1.4TreeMap使用案例
import java.util.Map;
import java.util.TreeMap;

public class treeMapDemo {
    public static void treeMapDemo(){
        Map map=new TreeMap<>();
        map.put("林冲","豹子头");
        map.put("鲁智深", "花和尚");
        map.put("武松", "行者");
        map.put("宋江", "及时雨");
        String str = map.put("李逵", "黑旋风");//看源码,put方法的返回值是key-value中的V
        System.out.println(map.size());
        System.out.println(map);
        // put(key,value): 注意key不能为空,但是value可以为空
        // key如果为空,会抛出空指针异常
        //m.put(null, "花名");
       str=map.put("无名",null);
        System.out.println(map.size());
        // put(key, value):
        // 如果key存在,会使用value替换原来key所对应的value,返回  旧value
        str = map.put("李逵", "铁牛");
        // get(key): 返回key所对应的value
        // 如果key存在,返回key所对应的value
        // 如果key不存在,返回null
        System.out.println(map.get("鲁智深"));
        System.out.println(map.get("史进"));
        //GetOrDefault(): 如果key存在,返回与key所对应的value,如果key不存在,返回一个默认值
        System.out.println(map.getOrDefault("李逵", "铁牛"));
        System.out.println(map.getOrDefault("史进", "九纹龙"));
        System.out.println(map.size());
        //containKey(key):检测key是否包含在Map中,时间复杂度:O(logN)
        // 按照红黑树的性质来进行查找
        // 找到返回true,否则返回false
        System.out.println(map.containsKey("林冲"));
        System.out.println(map.containsKey("史进"));
        // containValue(value): 检测value是否包含在Map中,时间复杂度: O(N)
        // 因为TreeMap是按照Key进行组织的,因此查找value时候就需要整体遍历
        // 找到返回true,否则返回false
        System.out.println(map.containsValue("豹子头"));
        System.out.println(map.containsValue("九纹龙"));
        // 打印所有的key
        // keySet是将map中的key放置在Set中返回的
        for (String s:map.keySet()) {
            System.out.print(s+"  ");
        }
        System.out.println();
        // 打印所有的value
        // values()是将map中的value放在collection的一个集合中返回的
        for (String s:map.values()) {
            System.out.print(s+" ");
        }
        System.out.println();
        // 打印所有的键值对
        // entrySet(): 将Map中的键值对放在Set中返回了
        for (Map.Entryentry:map.entrySet()) {
            System.out.print(entry.getKey()+"--->"+entry.getValue()+"    ");
        }
    }

    public static void main(String[] args) {
        treeMapDemo();
    }
}

2.Set

Set与Map主要不同有两点:
1.Set继承自Collection接口的实现类
2.Set中只存储了key

2.1Set常见方法

注意:

  1. Set是继承自Collection接口的一个接口类
  2. Set中只存储了Key,并且要求Key一定要唯一
  3. Set的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的
  4. Set的最大作用就是对集合中的元素去重
  5. 实现Set接口的常用类是TreeSet和HashSet,还有linkedHashSet,linkedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入顺序
  6. Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入
  7. HashSet可以插入null,但只能插入一个,而TreeSet不允许插入为null,否则会抛出空指针异常
  8. TreeSet和HashSet的区别:
2.2TreeSet使用举例
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class treeSetDemo {
    public static void treeSet(){
        Setset=new TreeSet<>();
        // add(key): 如果key不存在,则插入,返回true
        // 如果key存在,返回false
        boolean isIn=set.add("apple");
        set.add("orange");
        set.add("peach");
        set.add("banana");
        System.out.println(set.size());
        System.out.println(set);
        isIn=set.add("apple");
        // add(key): key如果是空,抛出空指针异常
        //s.add(null);
        // contains(key): 如果key存在,返回true,否则返回false
        System.out.println(set.contains("apple"));
        System.out.println(set.contains("watermelen"));
        // remove(key): key存在,删除成功返回true
        // key不存在,删除失败返回false
        // key为空,抛出空指针异常
        set.remove("apple");
        System.out.println(set);
        set.remove("watermelen");
        System.out.println(set);
        // 抛出空指针异常
        // s.remove(null);
        Iteratoriterator= set.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next() + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        treeSet();
    }
}


TreeSet和HashSet有什么区别?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号