常用集合数据结构的特点

一、数组

  数组存储数据的特点: 有序、可重复

  缺点:

  1、一旦初始化以后,其长度就不可以修改

  2、数组中提供的方法十分有限,对于添加,删除,插入数据等操作时非常不便,同时效率不高

  3、获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用

 

  

 

 

 

二、List集合

  特点:

  • 1.是一个有序的集合 (存储元素和取出元素的顺序是一致的)
  • 2.有索引 包含了一些带索引的方法 (索引从0开始)
  • 3.允许存储重复元素 (可以存储多个null值)

    1.Vector
      底层结构是数组
      线程比较安全 也会出现不安全的情况
      同步的
    2.ArrayList
      底层结构是数组
      不是同步的
           查询速度快 增删速度慢(底层数据结构决定的)
    3.LinkedList
          链表实现的
         不是同步的
         增删速度快 查询速度慢(底层数据结构决定的)
         不建议使用多态方式创建对象

 

  • ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。

  • ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
    ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。稍后,我们会比较List的“快速随机访问”和“通过Iterator迭代器访问”的效率。

    ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。

    ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。

     

    和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。

    ArrayList 的扩容问题

    ① 如果 ArrayList 调用不带参数的构造方法,那么顺序表的大小为0,当第一次使用 add( ) 方法的时候,整个顺序表才变为10,当顺序表中的10个数据放满的时候,开始以1.5倍的方式进行扩容。

    ② 如果 ArrayList 调用带参数的构造方法,那么顺序表的大小就是你输入参数时的容量,当放满的时候,依然以1.5倍的方式进行扩容。

三、Set集合

  特点: 

  • 1.不包含重复元素(只能存一个null值)
  • 2.没有带索引的方法 不能使用普通for循环遍历

  

  1.HashSet
    无序集合 (存储元素和取出元素的顺序有可能不一致)
    底层是一个哈希表结构(查询速度快)
    集合元素值可以是null

  2.LinkedHashSet
    是HashSet的子类
    有序集合 (存储元素和取出元素的顺序一致)
    底层是一个哈希表结构+链表结构(所以有序)

  2.TreeSet
    是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态
    底层是一个红黑树结构,默认整形排序为从小到大。

 

posted @ 2023-02-21 11:39  木木林2022  阅读(124)  评论(0)    收藏  举报