Set集合基础

Posted Shuu丶_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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接口提供的,同时,被接口实现的类也能使用,包括增删改查的方法

以上是关于Set集合基础的主要内容,如果未能解决你的问题,请参考以下文章

基础数据类型{set集合}

python--基础数据类型 set集合

python基础之七:set 集合

python基础--集合

python 基础 -06 set集合,深浅拷?

014-python基础-set集合