zoukankan      html  css  js  c++  java
  • Set集合基础

    关于hashCode
    hashSet的使用
    简单的来说,就是,如果两个对象的所有值都相同(hashCode值相同),那么就开始判断equals方法是否为false,如果为false就判定这两个对象不是重复的,如果为true就判断是重复的,即:
    先判断hashCode值是否相同(对象中的元素是否有不同的,有的话就是不同,都相同就相同),然后再判断equals是否相同(重写之后的equals方法,通过比较对象引用是不是为空,当前引用的getClass方法是不是满足,还有对象的所有属性是否相同),如果相同,就返回true,否则就返回false,理解这么多就够了。具体比较hashCode的方法,看代码(比较方法:设初始值为31,数字初始值为1,将数字的值加一起然后再判断字段是否为空,为空的话就+0,否则就加上字段值(字段的hashCode()方法返回的是一个整数,也就是这个字段的地址值),然后结果就是hashCode值)


    Set:
    特点:无序,不重复,没有整数索引

    HashSet的add方法查找不能去重的原因
    1.查看hashCode值是否相等
    2.查看地址是否相等
    3.查看equals值是否相等

    重写hashCode()方法和equals()方法去实现HashSet存储自定义对象时的去重

    Collections工具类的查询方法:
    1.static int binarySearch(List list,Object key):用于查询元素的位置,注意,被查询的集合必须是有序的(Set不能用)
    2.static void copy(List dest,List src):用于列复制,后面的复制到前面
    3.static void fill(List list,Object obj);用于填充,将list中的元素全部替换成obj
    4.static void reserve(List list);反转,将List列的值的顺序反过来
    5.static void shuffle(List list);随机置换,将整个List的元素随机换位置(实现洗牌)
    6.static void sort(List<T> list);将list中的元素按自然顺序排列(list中为基本类型)
    7.static void swap(List list,int i,int j);将list中指定的两个索引位置的值互换

    Map的增删查
    1.添加    V put(K key,V value);返回值是V
    2.删除    void clear();
    3.查询    V get(Object key);
        int size();
    4.判断    boolean containsKey(Object key);
        boolean containsValue(Object value);
        boolean isEmpty();
    5遍历:
                    1.用Set存储键值(因为Set不允许重复),然后用Collection存储对应值(因为Collection允许出现重复)
                    2.用Map的Entry方法,eg:Set<Map.Entry<K,V>> entrys = Map对象.entrySet();


    总结:
    1.单列集合从上到下依次为:Collection(根集合)--->List(ArrayList,LinkedList(没讲)),Set(HashSet,LinkedHashSet(没讲))
       双列集合从上到下依次为:Map--->HashMap,LinkedHashMap(没讲)

    2.List和Set的区别:List为有序的可重复的集合,Set为无序的不可重复的集合,并且没有整数索引
    3.因为Set是接口,所以用多态创建HashSet的对象,而HashSet实际上是HashMap的包装类,其本质是HashCode()
    4.使用HashSet的时候重写equals()和hashCode()的方法
    4.Set和Map的相同点和不同点
    相同点:都是集合,底层实现都是HashCode();
    不同点:Set只有一个获取键值的方法,但是Map有对应的Hash表值,有自己的获取key和value的方法,Map可以用entry遍历
    5.LinkedList底层是链表,增删快查询慢,ArrayList底层是数组,查询快增删慢
    6.HashMap和Set之间的联动
       HashMap的keySet()返回的是Set的映射视图(就是Set集合),将HashMap中的键存入Set中
    7.Collections工具类是专门为List接口提供的,同时,被接口实现的类也能使用,包括增删改查的方法

  • 相关阅读:
    es操作
    MySQL逻辑架构
    ceshimd
    mysql资料
    已解决 : VMware Workstation 与 Hyper-V 不兼容。请先从系统中移除 Hyper-V 角色
    MySQL数据库操作
    phpstorm配置laravel语法提示
    MySQL日志之慢查询日志(slow-log)
    456
    topcoder srm 553
  • 原文地址:https://www.cnblogs.com/Yuanpp/p/8445716.html
Copyright © 2011-2022 走看看