zoukankan      html  css  js  c++  java
  • [Day19]Collection接口中的子类(List集合、Set集合)

    1.List接口

      1.1API总结

      (1)是一个元素存取有序的集合

      (2)是一个带有索引的集合,通过索引可以精确的操作集合中的元素

      (3)集合中有可以重复的元素,通过元素的equals方法,来比较是否为重复的元素

      (4)List接口的常用子类:ArrayList集合、LinkedList集合

      1.2List接口中常用的方法

      (1)add(Object e):向集合末尾处添加指定的元素

      (2)add(int index,Object e):向集合指定索引处,添加指定的元素,原有元素依次后移

      (3)remove(Object e):将指定元素对象,从集合中删除,返回值为被删除的元素

      (4)remove(int index):将指定索引处的元素,从集合中删除,返回值为被删除的元素

      (5)set(int index,Object e):将指定索引处的元素,替换成指定的元素,返回值为替换前的元素

      (6)get(int index):获取指定索引处的元素,并返回该元素

      1.3List集合3中遍历方式

      (1)迭代器Iterator

      (2)for循环

      (3)加强for循环

      1.4 Iterator的并发修改异常

      (1)产生原因:在迭代过程中,使用了集合的方法对元素进行操作。导致迭代器不知道集合中的变化,易引发数据的不确定性

      (2)错误报告:java.util.ConcurrentModificationException

      (3)解决办法:在迭代过程中,不使用集合的方法操作元素,通过ListIterator迭代器操作元素

      1.5List结合存储数据的结构

      (1)堆栈-先进后出,栈的入口、出口都是栈的顶端位置

      (2)队列-先进先出,队列的入口、出口各占一侧

      (3)数组-查找元素快:通过索引,可以快速访问指定位置的元素

             增删元素慢

      (4)链表-多个节点之间,通过地址进行连接

           查找元素慢,增删元素快

      1.6ArrayList集合-数据存储的结构是数组结构,元素增删慢,查找快

      1.7LinkedList集合-数据存储的结构是链表结构,方便元素添加、删除的集合,LinkedList提供了大量首尾操作的方法

      1.8Vector集合-数据存储的结构是数组结构,为JDK中最早提供的集合。Vector集合已被ArrayList替代

    2.Set接口

      2.1Set接口

      (1)Set接口的集合中所存储的元素是不重复的,是一个无序的集合

      (2)通过元素的equals方法,来判断是否为重复元素

      2.2HashSet集合-此类实现Set接口,由哈希表支持。HashSet集合不能保证迭代顺序和元素存储顺序相同

      (1)数据存储方法

        采用哈希表结构存储数据,保证元素唯一性的方法依赖于:hashCode()与equals()方法

      (2)哈希表

        将对象存放到数组中时,根据这些对象的特有数据结合相应的算法(hashCode方法),计算出这个对象在数组中的位置,然后将对象存放到数组中。

      (3)hashCode方法

        当向哈希表存放元素时,需要根据元素的特有数据结合相应的算法

      (4)HashSet存储Java API中的类型元素

        给HashSet中存储JAvaAPI中提供的类型元素时,不需要重写元素的hashCode和equals方法,因为这两个方法已经在Java中重写完毕,如String类、Integer类

        给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一

      2.3LinkedHashSet

        HashSet子类,是链表和哈希表组合的一个数据存储结构。保证元素的存入和取出的顺序

      

    3.判断集合元素唯一的原理

      3.1ArrayList的contains方法

      (1)Boolean       contains(Object o)   如果此列表中包含指定的元素,则返回true

      (2)通过传入的元素的equals方法依次与集合中的旧元素比较,根据返回值判断

        自定义类型在未重写equals方法前,判断的依据是地址,想根据内容判断需要重写元素的equals方法

      3.2HashSet的add/contains等方法

      (1)boolean  add(E e)  如果此set中尚未包含指定元素,则添加指定元素

        set集合中不能存放重复元素,在添加过程中进行判断,有则不添加,否则添加

      (2)boolean  contains(Object o)  如果此set包含指定元素,则返回true

       HashSet集合由于是无序的,其判断唯一的依据是元素类型的hashCode和equals方法

       先判断新元素与集合内已有的旧元素的hashCode值,不同添加,相同再判断equals比较结果,不同添加。如果存储自定义类型,需要重写元素类的两方法。

        

        

  • 相关阅读:
    POJ 2991 Crane(线段树)
    HDU 1496 Equations(哈希表)
    POJ 2785 4 Values whose Sum is 0(哈希表)
    挑战程序设计竞赛 3.2 常用技巧精选(一)
    AOJ 0531:Paint Color(二维离散+imos)
    POJ 2549:Subsets(哈希表)
    POJ 3977:Subset(折半枚举+二分)
    CodeForces 148D Bag of mice
    POJ 2151 Check the difficulty of problems
    HDU 3853 LOOPS
  • 原文地址:https://www.cnblogs.com/ERFishing/p/10698301.html
Copyright © 2011-2022 走看看