zoukankan      html  css  js  c++  java
  • java集合框架1

    1.集合类 & 容器

    • 为什么出现集合类?
      面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就要对对象进行存储,集合就是存储对象最常用的一种方式。
    • 数组和集合类同是容器,有何不同?
      数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储任意数据类型,集合只能存储对象。
    • 集合类的特点
      集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
      集合框架的构成及分类

    两大接口
    Java集合类主要由两个接口派生出来:

    • Collection
      Set :不能存放重复对象
      List :可存放重复对象,有序
      Queue :队列
      SortedSet :可对集合数据排序
    • Map
      SortedMap :可对集合数据排序

    Collection接口
    boolean add(Object o):该方法用于向集合里面添加一个元素,若集合对象被添加操作改变了,返回true.
    boolean addAll(Collection c):把集合c里面的所有元素添加到指定集合里面去,如果集合对象被添加操作改变了返回true.
    void clear():清除集合里面的所有元素,将集合长度变为0。
    boolean contains(Object o):返回集合里是否包含指定的元素。
    boolean containsAll(Collection c):返回集合里是否包含集合c内所有的元素。
    boolean isEmpty():返回集合是否为空(长度是否为0)。
    Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素。
    boolean remove(Object o):删除集合中指定元素o。
    boolean removeAll(Collection c):从集合中删除集合c里面的元素。若删除一个或以上返回true。
    boolean retainAll(Collection c):从集合中删除集合c里不包含的元素。
    int size():得到集合元素的个数。
    Object[] toArray():把集合转成一个数组,所有集合元素编程数组元素。

    2.集合遍历输出方式

    Iterator:迭代输出
    一旦操作集合的遍历输出,首选Iterator接口;
    ListIterator:Iterator子接口,专门输出List中的元素;
    Enumeration:古老的输出方式,迭代Vector元素,被Iterator取代;
    foreach:可输出数组和Iterable对象;

    • Iterator接口
      Iterator主要遍历Collection集合中的元素,也有称为迭代器或迭代精灵。
      boolean hasNext():若被迭代的集合元素还没有被遍历,返回true.
      Object next():返回集合的下一个元素.
      void remove():删除集合上一次next()方法返回的元素。(若集合中有多个相同的元素,都可以删掉)
      iterator对于集合才能用,for不同,只要是循环都可用。
      迭代是取出集合中元素的一种方式。
      因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。
      迭代器在Collcection接口中是通用的,它替代了Vector类中的Enumeration(枚举)。迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。
      迭代器的next方法返回值类型是Object,所以要记得类型转换。

    3.Set接口

    Set是Collection子接口;
    Set和Collection基本上一样,一点除外:
    Set无法记住添加的顺序,不允许包含重复的元素。
    当试图添加两个相同元素进Set集合,添加操作失败,add()方法返回false。
    Set判断两个对象是否相等用equals,而不是使用==。
    也就是说两个对象equals比较返回true,Set集合是不会接受这个两个对象的。
    常用子类:
    HashSet:散列存放
    TreeSet:有序存放

    hashCode方法对于HashSet的作用
    HashSet类是Set接口最常用的实现类,采用hash算法存储数据,具有良好的存储和查找功能。
    散列存储:不记录添加顺序;排列顺序时,顺序有可能发生变化;
    线程不安全的,多个线程访问一个HashSet要使用同步代码;
    HashSet集合元素值允许是null,但是最多只能有一个;
    hash(翻译为哈希,或散列)算法的功能:
    保证通过一个对象快速找到另一个对象;
    其算法价值体现在速度,可以保证查询快速执行;
    当从HashSet中访问元素时,HashSet先计算该元素的hashCode(也就是该对象的hashCode方法返回值),然后直接到该HashCode对应的位置取出该元素;
    在这里对象的hashCode就好比是数组里的索引,但是不是索引;

    不同类型字段如何取得hashCode

    HashSet元素添加

    当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,判断已经存储在集合中的对象的hashCode值是否与添加的对象的hashCode值一致:若不一致:直接添加进去;若一致,再进行equals方法比较,equals方法如果返回true,表明对象已经添加进去了,就不会再添加新的对象了,否则添加进去;
    如果我们重写了equals方法,也要重写hashCode方法,反之亦然;。
    HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode方法返回值也相等。
    如果需要某个类的对象保存到HashSet集合中,覆写该类的equals()和hashCode()方法,应该尽量保证两个对象通过equals比较返回true时,他们的hashCode返回也相等。

    4.TreeSet

    使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序;
    参与排序的元素必须是同一类型的,不然会发生ClassCastException异常;
    TreeSet是SortedSet接口唯一的实现,与HashSet相比额外的方法有:
    Comparator comparator():返回当前Set使用的Comparator,若返回null,表示以自然顺序排序。
    Object first() 返回此 set 中当前第一个(最低)元素。
    Object last() 返回此 set 中当前最后一个(最高)元素。
    SortedSet subSet(Object fromElement, E toElement) 返回此 set 的部子集,其元素从 fromElement(包括)到 toElement(不包括)。
    SortedSet headSet(Object toElement)返回此 set 的部分子集,其元素严格小于 toElement。
    SortedSet tailSet(Object fromElement) 返回此 set 的部分子集,其元素大于等于 fromElement。

    TreeSet的排序之自然排序
    TreeSet会调用元素的compareTo(Object o)方法来比较元素之间的大小关系,然后将集合里的元素按升序排列.此时需要排序元素的类必须实现Compareble接口,并覆写其int compareTo(Object o)方法;
    该方法用于比较对象,若:obj1,compareTo(obj2),返回0,表示两个对象相等,若返回一个正整数,表示obj1大于obj2,若返回一个负整数,表示obj1小于obj2;
    对于TreeSet集合而言,判断两个对象相等的标准是:
    compareTo()方法比较返回 0;

    TreeSet的排序之定制排序
    TreeSet的自然排序是根据元素的大小进行升序排序的,若想自己定制排序,比如降序排序,就可以使用Comparator接口了:
    该接口包含int compare(Object o1,Object o2)方法,用于比较两个对象的大小,比较结果和compareTo方法一致;
    要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象,该对象里负责集合元素的排序逻辑;
    TreeSet(Comparator comparator)

  • 相关阅读:
    从安装、管理到防御_阿里云安骑士全向测评
    云架构师前(钱)景这么好_我们该如何转型?这有两位阿里云云架构总监多年心得
    Infrastructure_as_Code——Kubernetes一键编排实践
    大中华地区(含港澳台)空气质量接口参加阿里云API_as_a_Service_大赛
    E-MapReduce集群启停HDFS/YARN服务
    云服务器ECS还原安全组规则功能介绍_安全组规则的备份与还原
    E-MapReduce集群中HDFS服务集成Kerberos
    FastReport中如何加入自定义函数
    查找算法总结
    八大排序算法总结
  • 原文地址:https://www.cnblogs.com/linbin7/p/14544462.html
Copyright © 2011-2022 走看看