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接口提供的,同时,被接口实现的类也能使用,包括增删改查的方法

  • 相关阅读:
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    449. Serialize and Deserialize BST
    114. Flatten Binary Tree to Linked List
    199. Binary Tree Right Side View
    173. Binary Search Tree Iterator
    98. Validate Binary Search Tree
    965. Univalued Binary Tree
    589. N-ary Tree Preorder Traversal
    eclipse设置总结
  • 原文地址:https://www.cnblogs.com/Yuanpp/p/8445716.html
Copyright © 2011-2022 走看看