zoukankan      html  css  js  c++  java
  • Java基础第二十三天总结——集合

    目录:

    一、Collection接口方法

    二、Iterator迭代器接口

    三、Collection子接口一:List

    四、Collection子接口二:Set

    /*****************分割线************************/

    一、Collection接方法

    Collection接口

    Collection接口是List、Set和Queue接口的父接口,该接口里定义的方法既可用于操作Set集合,也可用于操作List和Queue集合。

    JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如Set和List)实现

    Collection接口方法

    1.添加:add(Object obj)、addAll(Collection coll)

    2.获取有效元素的个数:int size()

    3.清空集合:void clear()

    4.是否是空集合:boolean isEmpty( )

    5.是否包含某个元素:boolean contains(Object obj):通过元素的equals方法来判断是否是同一个对象

    boolean containsAll(Collection c):也是调用元素的equals方法来比较的,拿两个集合的元素挨个比较

    6.删除:boolean remove(Object obj):删除找到的第一个元素、

    boolean removeAll(Collection coll):取当前集合的差集

    7.取两个集合的交集:boolean retainAll(Collection c)

    8.集合是否相等:boolean equals(Object obj)

    9.转成对象数组:Object[ ] toArray()

    10.获取集合对象的哈希值:hashCode()

     11.遍历:iterator():返回迭代器对象,用于集合遍历

    二、Iterator迭代器接口

    Iterator对象称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素

    所有实现Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象

    Iterator本身不提供承载对象的能力,如果需要创建Iterator对象,则必须有一个被迭代的集合

    集合每次调用iteratr()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前

    Iterator接口的remove()方法

    注意:
    Iterator可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove方
    法,不是集合对象的remove方法。
    如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法,
    再调用remove都会报IllegalStateException。

    使用foreach循环遍历集合元素

    Java5.0提供了foreach循环迭代访问Collection和数组

    遍历集合的底层用Iterator()方法来实现

    foreach还可以用来遍历数组

    三、Collection子接口之一:List

    鉴于Java中数组用来存存储数据的局限性,通常用List替代数组

    List集合类中元素有序、且可重复。集合中的每个元素都有其对应的顺序索引

    List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

    JDK API中List接口的实现类常用的有:ArrayList、ListedList和vector

    List接口方法

    void add(int index,Object ele):在index位置插入ele元素

    boolean addAll(int index,Collection else):从index位置开始将eles中的所有元素添加进来

    Object get(int index):获取指定index位置的元素

    int indexOf(Object obj):返回obj在集合中首次出现的位置

    int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置

    Object remove(int index):一处指定index位置的元素,并返回此元素

    Object set(int index,Object ele):设置指定index位置的元素为ele

    List subList(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的子集合

    List实现类之一:ArrayList

    ArrayList是List接口的典型实现类、主要实现类

    本质上,ArrayList是对象引用的一个“变长”数组

    JDK1.8ArrayList像兰函数一开始创建一个长度为0的数组,当添加第一个元素时再创建一个始容量为10的数组

    Array.asList(...)方法返回的List集合,既不是ArrayList实例,也不是Vector实例,Arrays.asList(...)返回值时一个固定长度的List集合

    List实现类之二:LinkedList

    对于频繁插入或删除元素的操作,建议使用LinkedList类,效率较高

    新增方法:

     void addFirst(Object obj)
     void addLast(Object obj)
     Object getFirst()
     Object getLast()
     Object removeFirst()
     Object removeLast()

    LinkedList:双向链表,内部没有声明数组,而是定义了Node类型的first和last,用于记录首末元素。同时,定义内部类Node,作为LinkedList中保存数据的基本结构。Node除了保存数据,还定义了两个变量。

    prev变量记录前一个元素的位置

    next变量记录下一个元素的位置

    List实现类之三:Vector

    大多数操作与ArrayList相同,区别在于Vector是线程安全的

    在各种List中,最好把ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList;Vector总是比ArrayList慢,所以尽量避免使用。

    新增方法

     void addElement(Object obj)
     void insertElementAt(Object obj,int index)
     void setElementAt(Object obj,int index)
     void removeElement(Object obj)
     void removeAllElements()

    Collection子接口之二:Set接口

    Set接口是Collection的子接口,set接口没有提供额外的方法

    Set集合不允许包含相同的元素,如果试把两个相同的元素加入同一个Set集合中,则添加操作失败

    Set判断两个对象是否相同不是使用 == 运算符,而是根据equals()方法

    Set实现类之一:HashSet

    HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。
    HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取、查找、删除
    性能。
    HashSet 具有以下特点:
    不能保证元素的排列顺序
    HashSet 不是线程安全的
    集合元素可以是 null
    HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相
    等,并且两个对象的 equals() 方法返回值也相等。
    对于存放在Set容器中的对象,对应的类一定要重写equals()和hashCode(Object
    obj)方法,以实现对象相等规则。即:“相等的对象必须具有相等的散列码”。

     

    重写hashCode()方法的基本原则

    在程序运行时,同一个对象多次调用 hashCode() 方法应该返回相同的值。
     当两个对象的 equals() 方法比较返回 true 时,这两个对象的 hashCode()
    方法的返回值也应相等。
     对象中用作 equals() 方法比较的 Field,都应该用来计算 hashCode 值。

    Set实现类之二:LinkedHashSet

    LinkedHashSet是HashSet的子类

    LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置,
    但它同时使用双向链表维护元素的次序,这使得元素看起来是以插入
    顺序保存的。
    LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全
    部元素时有很好的性能。
    LinkedHashSet 不允许集合元素重复。

    Set实现类之三:TreeSet

    TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。
    TreeSet底层使用红黑树结构存储数据
     新增的方法如下: (了解)
    Comparator comparator()
    Object first()
    Object last()
    Object lower(Object e)
    Object higher(Object e)
    SortedSet subSet(fromElement, toElement)
    SortedSet headSet(toElement)
    SortedSet tailSet(fromElement)
    TreeSet 两种排序方法:自然排序和定制排序。默认情况下,TreeSet 采用自然排序。

    排序-自然排序

    排序——定制排序

     

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    并行导致的进程数过大无法连接数据库
    Oracle 等待事件(Wait Event):Sync ASM rebalance 解析
    2套RAC环境修改scanip后客户端连接异常
    数据流通技术工具
    Hack The Box——Scavenger
    MySQL中InnoDB引擎对索引的扩展
    30分钟,教你从0到1搞定一次完整的数据可视化分析!
    【2020-MOOC-浙江大学-陈越、何钦铭-数据结构】树和堆(第五周的笔记和编程作业)
  • 原文地址:https://www.cnblogs.com/zhoutie170821/p/12039918.html
Copyright © 2011-2022 走看看