• java的Map和Set集合


    Set集合

    一.HashSet

    HashSet
    元素是无序的
    向Hashset中添加元素时,是如何判断元素是否重复的:
    添加元素时,如果用equals判断效率太低,因为equals是一个一个字符比较
    HashSet底层用到hashCode和equals
    一个内容:"sahdihwo"计算hash值,值相同则内容相同
    但是有可能出现值相同内容不同的情况,因此值相同时再用equals判断这样子节省了很多时间

    HashSet<String> set=new HashSet<>();
    //只输出一个
    set.add("dsadw");
    set.add("dsadw");
    set.add("dwdq");
    //通话和重地hash值一样但可以放进数组说明上述底层实现的方式
    set.add("通话");
    set.add("重地");
    System.out.println(set);
    
    HashSet<Teachers> set1=new HashSet<>();
    Teachers teachers1=new Teachers(1,"hh");
    Teachers teachers2=new Teachers(2,"hhh");
    Teachers teachers3=new Teachers(1,"hh");
    Teachers teachers4=new Teachers(4,"hhhh");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    添加时,判断会调用hashCode计算hash值,如果这个类没有hashCode比如Teachers就没有就会调用父类Object中的hashCode:public native int hashCode();native是本地方法(操作系统提供的)所以只要是new出来的都调用Object类中hash值,时内存地址,所以不相同

    		set1.add(teachers1);
            set1.add(teachers2);
            set1.add(teachers3);
            set1.add(teachers4);
            System.out.println(set1);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    因为teahcer1和teacher3是两个对象,在内存地址中是两个东西,所以Object的hashCode算出来的不一样,两个类都会输出,如果想要算内容的hash值就得自己在这个新类中重写hashCode和equals方法

    二.TreeSet

    Set 不能存储重复元素
    TreeSet底层时树形结构 左边小右边大
    添加进来的元素可以排序(按元素的自然顺序)

    		TreeSet<Teachers> set1=new TreeSet<>();
            Teachers teachers1=new Teachers(1,"hh");
            Teachers teachers2=new Teachers(2,"hhh");
            Teachers teachers3=new Teachers(1,"hh");
            Teachers teachers4=new Teachers(4,"hhhh");
    
            set1.add(teachers1);
            set1.add(teachers2);
            set1.add(teachers3);
            set1.add(teachers4);
            System.out.println(set1.toString());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    TreeSet底层用的是comparable接口中的compareTo进行比较

    新创建的类没有compareTo需要方法重写

    public class Teachers extends Object implements Comparable<Teachers>
    
    @Override
        public int compareTo(Teachers o) {
                return this.num - o.num;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    重写toString:

    public String toString(){
            return num+name;
        }
    
    • 1
    • 2
    • 3
    用迭代器遍历TreeSet数组:
    Iterator<Teachers> it= set1.iterator();
    while(it.hasNext()){
        Teachers t= it.next();
        System.out.println(t.toString());
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Map类

    Map接口:

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

    Hashmap:

    		HashMap<String,String> map=new HashMap<>();
            map.put("A","aaa");
            map.put("B","bbb");
            map.put("C","ccc");
            map.put("D","ddd");
            map.put("E","eee");
            map.put("A","qqq");
            //键值不能重复,后面的会覆盖前面的
            System.out.println(map.get("A"));//qqq
            //map.clear();//清空所有键值映射
            //System.out.println(map.remove("B"));//删除键值映射,并返回改键对应的值
            System.out.println(map.containsKey("C"));//true,是否包含keyC
            System.out.println(map.containsValue("dsa"));//flase,是否包含值dsa
            System.out.println(map.size());
            Collection<String> values=map.values();//保存map的所有值
            System.out.println(values);//[qqq, bbb, ccc, ddd, eee]
            Set<String> keys=map.keySet();//保存map的所有key
            System.out.println(keys);//[A, B, C, D, E]
            System.out.println(map);//{A=qqq, B=bbb, C=ccc, D=ddd, E=eee}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    put底层原理:

    在这里插入图片描述

  • 相关阅读:
    GCC 编译器
    Hystrix的监控平台
    什么是腾讯云云硬盘?有哪些优势?应用于哪些场景?
    【c++ primer 笔记】第13章 拷贝控制
    JS 中的 Window.open() 用法详解
    如何备份Syslog配置文件?
    查询中字段用法
    Piramiko实现root权限登录
    代码的艺术-Writing Code Like a Pianist
    string模拟实现
  • 原文地址:https://blog.csdn.net/qq_45576281/article/details/133248934