• java基础05 集合


    一、集合的由来?
    我们学习Java,可以操作很多对象 ,存储 的容器有数组和StringBuffer,StringBuilder;
    而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用。
    二、集合和数组的区别?
    A:长度区别
    数组固定
    集合可变
    B:内容区别
    数组可以是基本类型,也可以是引用类型
    集合只能是引用类型
    C:元素内容
    数组只能存储同一种类型
    集合可以存储不同类型(其实集合一般存储的也是同一种类型)
    三、集合的继承体系结构?
    由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,
    我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。

    在学习集合类时,我们重点关注四个要点:

    1、是否允许为null

    2、是否有序(有序:指插入元素时,保持插入的顺序性,也就是先插入的元素优先放入集合的前面部分。 )

    3、是否唯一,即是否允许相同数据

    4、在多线程下是否安全

    四、Collection的功能概述
    Collection sc=new Collection();//错误,因为接口不能不能实例化;
    Collection sc=new ArrayList();//正确做法;
    A:添加功能 boolean add(E e);
    B:删除功能 void clear();
    C:判断功能 boolean isEmpty();
    D:获取功能 boolean retainAll(Collection c);假设有两个集合AB,A对B做交集,最终的结果保存在A,B不变;
    返回值表示的是A是否发生改变;
    E:长度功能 int size();
    F:交 boolean containsAll(Collection c);

    G:把集合转数组(了解)Object[] toArray();

    五、List的子类特点
    ArrayList
    底层数据结构是数组,查询快,增删慢。
    线程不安全,效率高。
    Vector
    底层数据结构是数组,查询快,增删慢。
    线程安全,效率低。
    LinkedList
    底层数据结构是链表,查询慢,增删快。
    线程不安全,效率高。

    (1)List的子类特点
    ArrayList:
    底层数据结构是数组,查询快,增删慢
    线程不安全,效率高
    Vector:
    底层数据结构是数组,查询快,增删慢
    线程安全,效率低
    LinkedList:
    底层数据结构是链表,查询慢,增删快
    线程不安全,效率高
    (2)ArrayList
    A:没有特有功能需要学习
    (3)Vector
    A:有特有功能
    a:添加
    public void addElement(E obj) -- add()
    b:获取
    public E elementAt(int index) -- get()
    public Enumeration<E> elements() -- iterator()
    (4)LinkedList
    A:有特有功能
    a:添加
    addFirst()
    addLast()
    b:删除
    removeFirst()
    removeLast()
    c:获取
    getFirst()
    getLast()

    六、Set   无序,唯一

            LinkedHashSet类概述

        1、元素有序唯一

        2、由链表保证元素有序

        3、由哈希表保证元素唯一

       HashSet类概述

        1、不保证 set 的迭代顺序

        2、特别是它不保证该顺序恒久不变。

       TreeSet类概述

        1、使用元素的自然顺序对元素进行排序

        2、或者根据创建 set 时提供的 Comparator 进行排序

        3、具体取决于使用的构造方法。

        TreeSet是如何保证元素的排序和唯一性的

        底层数据结构是红黑树(红黑树是一种自平衡的二叉树)

    七、Map 

    TreeMap

    TreeMap实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

    TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

    Hashtable

    Hashtable与HashMap类似,Hashtable继承自Dictionary类,实现了Map接口,不同的是它不允许记录的键或者值为空;

    和HashMap相比,Hashtable是线程同步的,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

    而且Hashtable可以通过Enumeration去遍历。

    LinkedHashMap

    LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

  • 相关阅读:
    解决ERROR C2011: 'FD_SET' : 'STRUCT' TYPE REDEFINITION问题
    github简单使用教程
    Win32 多线程的创建方法和基本使用
    day 05
    day04
    day03
    day02
    day 06
    day_05
    day 05
  • 原文地址:https://www.cnblogs.com/sunTin/p/6637450.html
Copyright © 2020-2023  润新知