• Set接口下的集合


    一、集合(定义字段的时候统一使用包装类

    1、集合大类分为ListSetMap三种,其中,List集合是有序可重复的,并且可以使用普通for循环、增强for循环、正向迭代器、双向迭代器;Set集合是无序不可重复的,不可以使用普通for循环和双向迭代器,只能使用增强for循环和正向迭代器;Map集合也是无序不可重复的,只能存储键值对(也就是我们太容易对象),Map集合本身不能使用任意的循环方式。

    二、Set集合

    1HashSet集合HashSet集合里面传入了匿名对象的话,那么它的删除也是根据HashCodeequals方法来判断的。)

       HashSet集合是无序、不可重复的,它的底层是使用了HashMap实现的,HashMap的底层是数组和链表实现的;无序指的是增加元素的顺序和取出元素的顺序不一定一致,不可重复是因为它使用了通过首先获取HashCode值,再通过Hash算法将HashCode值算出索引,最后比较equals方法来决定两个值是否重复(其中,如果两个数据通过HashCode值算出的索引一致,那么会在同索引处比较equals方法,如果不一致,则会通过链表结构将数据挂在此索引的位置,如果算出的索引一致,那么就不会使用equals方法)(其实你的HashCode值相等,通过Hash算法算出的索引也就像等,所以不必强调这个)

       Set的继承特点:

       Set 无序的,不可重复的,不能使用普通for循环和双向迭代器

        |

        |__HashSet   TreeSet

       List  有序的,并且数据可重复的可以使用偏头痛for循环、增强for循环、正向迭代器、双向迭代器

         |

      |___ArrayList   LinkedList

    2、TreeSet集合

    TreeSet集合特点:无序(添加元素的顺序和取出元素的顺序不一定是相同的)、不可重复的(判断重复的方法:

       ①compareTo方法返回0,表示相等;②compare方法返回0,则表示相等),是基于二叉树实现的。

       包装类都实现了comparable接口,因此都覆写了compareTo方法(具有了排序功能),一个普通类的对象本身是没有排序的功能的,但是由于实现了Comparable接口,因此对象就具有了排序的功能。

      

      CompareTo方法如果返回正数、或者负数都会按照不一致的自然方法进行排序,但是如果返回0,则表示对象都相等,意味着TreeSet集合只存储了第一个元素

     注意:TreeSet集合内部没有实现ListIterator接口,因此不能使用双向迭代器,又因为TreeSet集合是无序的,因此不能够使用普通for循环(不能按照指定的索引取到值)

    注意:TreeSet容器存储的值必须要拥有自然排序或者定制排序(比较器)的能力

    如果一个类实现了Comparator接口,那么这个类就是一个比较类,在TreeSet集合中有一个构造方法是

       TreeSet(SortedSet<E> s) 构造一个按照比较类规则来进行比较集合中元素的方法,然后将这个比较类的对象传入集合的对象中,就可以使用定制排序(比较器)了(最好使用匿名内部类)。

  • 相关阅读:
    [转]SVN服务器搭建和使用(二)
    [转]SVN服务器搭建和使用(一)
    BZOJ 2049 Sdoi2008 Cave 洞穴勘测
    BZOJ 1589 Usaco2008 Dec Trick or Treat on the Farm 采集糖果
    BZOJ 2796 POI2012 Fibonacci Representation
    BZOJ 2115 Wc2011 Xor
    BZOJ 3105 CQOI2013 新Nim游戏
    BZOJ 2460 Beijing2011 元素
    BZOJ 3687 简单题
    BZOJ 1068 SCOI2008 压缩
  • 原文地址:https://www.cnblogs.com/limengkun/p/10710047.html
Copyright © 2020-2023  润新知