zoukankan      html  css  js  c++  java
  • 【Java基础】04_集合框架

    一、java中集合了类的关系图【简化版】

    注:

    虚线矩形表示接口

    实线矩形表示具体实现类

    实线矩形加粗表示具体实现类使用频率高,作为重点掌握

    集合是存储多个元素的容器,但是,由于数据结构不同,java就提供了多种集合类。

    而这多种集合类有共性的功能,所以,通过不断的向上抽取,最终形成了集合体系结构。

    二、集合与数组的异同(面试题)

    1.相同点

        他们都是容器,都可以储存数据。

    2.区别

      长度区别

          数组固定:数组对象创建时,长度就固定

        集合可变:集合可以随着存储元素个数的变化,长度发生变化

      存储元素类型区别

          数组即可以储存基本数据类型,也可以储存引用数据类型。

        集合只能存储引用数据类型。

      是否存储同一类型区别

          数组存储元素类型必须一致。

        集合元素类型可以不一致。通过泛型可以限制集合的存储元素类型

    三、单列集合继承体系

    Collection(单列集合)

    |—— List(元素存取有序,有索引,可以重复)

    |   |—— ArrayList

    |   |   底层是数组实现的,线程不安全,查找和修改快,增和删比较慢

    |   |—— LinkedList

    |   |   底层是链表实现的,线程不安全,增和删快,查找和修改比较慢

    |   |—— Vector

    |   |   底层是数组实现的,线程安全,无论增删改查都慢

    |   |—— 使用场景

    |           |—— 如果查找和修改多,ArrayList

    |           |—— 如果增和删多,LinkedList

    |           |—— 如果都多,ArrayList

    |

    |—— Set(元素存取无序,无索引,不可以重复)

    |—— HashSet

    |       |    底层是哈希算法实现

    |     |—— LinkedHashSet

    |             底层是链表实现,保证元素存取顺序,但是也是可以保证元素唯一,HashSet原理一样

    |—— TreeSet

    |   底层是二叉树算法实现

    |—— 使用

        一般在开发的时候不需要对存储的元素排序,大多用HashSet,HashSet的效率比较高

    四、双列集合继承体系

    Map(双列集合)

        |—— HashMap

        |      | 底层是哈希算法,针对键有效

        |      |—— LinkedHashMap

        |             底层是链表,针对键有效

        |—— TreeMap

        |       底层是二叉树算法,针对键有效

      |—— 使用场景

               开发中用HashMap比较多有效

    五、继承体系学习方法

        学习顶层:因为顶层定义的是共性内容。举例:水杯

        使用底层:因为底层才是具体实现。举例:正方形水杯。椭圆形水杯

    集合的常见使用步骤(四步走)

        A:创建集合对象

        B:创建元素对象

        C:添加元素对象到集合对象中

        D:遍历集合对象中的元素对象

            1、通过集合对象获取迭代器对象。

            2、通过迭代器对象的hasNext()方法判断是否有元素。

            3、通过迭代器对象的next()方法获取元素并移动到下一个元素。

          获取返回值为【Object对象】,需向下转型,使用子类对象的方法

     

    六、java.util.Collection<E>接口.共性方法

    1添加功能(掌握)

    1. boolean add(Object obj):

      向集合中添加一个元素。

       2.boolean addAll(Collection c):

        向集合中添加传入集合的所有元素。

    2删除功能(掌握)

    1. void clear():

      清空集合中所有的元素。

    2. boolean remove(Object obj):

      删除集合中第一次出现的指定元素对象。

      3. boolean removeAll(Collection c):

        删除集合中指定的集合元素。相当于去交集。

        只要有【一个】元素被移除了,就返回true

    3判断功能(掌握)

    1. boolean isEmpty():

      判断集合是否为空。

    2. boolean contains(Object obj):

      判断集合是否包含指定的元素。

      3. boolean containsAll(Collection c):

        判断集合是否包含指定的集合中的【所有】元素。

        对比记忆:

        String的判断功能也有isEmpty()contains()

    4遍历功能(掌握)

      Iterator iterator():获取迭代器。Collection类集合的专用遍历方式。

    Iterator接口中的方法

    1. boolean hasNext():

      判断是否还有下一元素,有就返回true

    2. Object next():

      返回值为Object获取元素,并移动指针到下一个位置。

      不要多次使用it.next()方法,因为每次使用都是访问下一个对象。

      可能报出:NoSuchElementException 没有这样的元素异常。

      当你已经获取到元素末尾了,你还要获取,已经没有元素了,所以报错。

    3. void remove():

      从迭代器指向的Collection中移除迭代到当前元素

      每次调用 next() 只能调用一次此方法。

    5长度功能(掌握)

    int size():

    获得集合的元素个数。

    对比记忆:

      数组:属性array.length

      StringStringBuffer:方法length();

    6交集功能(了解)

    boolean retainAll(Collection c):

    判断集合中是否有相同的元素。取交集的意思。

    原集合改变,返回true

    当对象集合是参数集合的子集,那么会返回false,因为原集合对象未发生改。

    思考:

        boolean retainAll(Collection c):

    两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢?

        //假设有两个集合AB

        //AB做交集,最终的结果保存在A中,B不变。

        //返回值表示的是A是否发生过改变。

     

    7转换功能(掌握)

    Object[] toArray():

    把集合变成数组。遍历集合的一种方式。

    注意返回为Object数组,需要向下转型,举例:String s = (String) objs[x];

     

    数组转成集合的方式:

        java.util.Arrays;

            public static <T> List<T> asList(T... a)返回一个受指定数组支持的固定长度大小的集合。

     

    七、java.util.List<E>接口(特有方法与索引有关)

    public interface List<E> extends Collection<E>

    有序的 collection(也称为序列)。

    此接口的用户可以对列表中每个元素的插入位置进行精确地控制。

    用户可以根据元素的整数索引(在列表中的位置)访问元素,

    并搜索列表中的元素。

    set 不同,列表通常允许重复的元素。

    1 List的特点

    1. 有序(存储和取出的顺序一致)

    2. 元素可以重复

    3. 可以通过索引值操作对应位置的元素

    2添加功能

    1. void add(int index,Object obj):

      在指定的索引位置增加插入指定的元素

      注意:

      Collection中的add方法返回值为boolean

      IndexOutOfBoundsException -如果索引超出范围 (index < 0 || index > size())

      ClassCastException - 如果指定元素的类不允许它添加到此列表

      2. boolean addAll(int index, Collection c)

        在指定的索引位增加一个集合的一堆元素

    3删除功能

    Object remove(int index):

    删除指定索引位置的元素,返回被删除的元素

    4修改功能

    Object set(int index,Object obj):

    将指定索引位置的元素替换为指定元素,返回原元素

    5获取功能

    1. Object get(int index):

      获取指定索引位置的元素

      特殊用法:

      结合普通for循环和size()方法,可以遍历List集合或者其子类

    2. int indexOf(Object obj):

      获取指定元素第一次出现的索引位置

    3. int lastIndexOf(Object o)

      获取指定元素在集合中最后出现的索引

      4. ListIterator listIterator():

        获取列表迭代器

        可以遍历集合,在遍历的过程中,对集合元素做出修改和增删

    6截取功能

    List<E> subList(int fromIndex, int toIndex)

    返回一个子集,从指定索引开始(包括),到指定索引结束(不包括)

    7小结

    List集合特有遍历方式

    普通for循环+int size()方法+Object get(int index)方法+向下转型

    可以遍历List集合及其子类,遍历过程中可以使用集合对象操作元素对象

    总结

    List接口的特有方法都与索引index有关

    注意:方法的返回值为Object的居多

  • 相关阅读:
    Fastjson
    react 使用createContext、Consumer 及 useContext 、Class.contextType父子组件共享数据
    使用useReducer 实现 todoList
    react中 useMemo与useCallback使用
    react17 函数组件 使用 better-scroll2.0 封装方法 及 使用
    react 执行 yarn build ,无法直接打开dist文件下的index
    react-redux 持久数据存储
    document.body.removeChild 获取到 symbol 标签
    react嵌套路由,并设置默认子路由
    Vagrant环境下配置node_exporter、mysqld_exporter、prometheus、grafana
  • 原文地址:https://www.cnblogs.com/iwin12021/p/6216541.html
Copyright © 2011-2022 走看看