zoukankan      html  css  js  c++  java
  • 一、JavaSE_集合(集合简单认识、Collection、List)

    集合(一)

    一、集合的简单认识

    1.侃一侃

    集合,说白了就是存放数据的,还记得OOP当中,我们曾说过,OOP将数据放在第一位,然后再考虑操作数据的算法。也就是研究数据的存储方式,或者说是数据结构,咱先不谈数据结构那些东西。集合用来存放数据,会有不同的存储数据的方式,如数组,集合。那集合和数组有什么区别呢?

      区别
    数组

    1.数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值

    2.数组长度是固定的,不能自动增长

    集合

     1.集合只能存储引用数据类型(对象),集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象。

    2.集合的长度的是可变的,可以根据元素的增加而增长

     看了上图想必就知道什么时候用数组什么时候用集合了吧~

    数组:当元素固定时,那么就推荐使用数组。

    集合:当元素不固定时,那么就推荐使用集合。

    2.来个初步认识(集合体系结构)

    菜来了,上图:

    图中反映了各个集合的特点,正如我们在烧锅做饭的时候采用不同的工具一样,不同的碗和碟子有不同的作用。

    接下来我们重点谈谈List。

    Collection是单列集合的根接口,图中,他有两个子接口。一个是List,一个是Set。今天主要分析List,也就是ArrayList,LinkedList,以及Vector(了解)。

    List是一个存放有序的集合,可以存储重复。我们来看这一句代码,List list = new ArrayList(); 注:这里没有考虑泛型,接下来会谈,先不去管。

    List接口指向子类的具体实现,而ArrayList存放的就是有序的集合,会随着存放元素的增大而增大。同样,LinkedList也是一样,那么LinkedList和ArrayList有什么区别呢?

    要想知道区别,那就得知道他们底层是怎么实现的?把上面那个图表格化一下。

    ArrayList 底层是用数组实现的
    LinkedList 底层使用链表实现的

    一个是数组实现,一个是链表实现。

    数组有什么特点:数组查询修改快,因为根据索引去查一步到位;增加和删除慢,因为增加删除都要移动索引。

    链表有什么特点:链表删除和增加快,但是查询和修改比较慢

    数组

    * 查询,修改快

    * 增加,删除慢

    链表

    * 查询,修改慢

    * 增加,删除快

     二、List集合三个子类的特点

    1.

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

    2.

    Vector相对ArrayList查询慢(线程安全的)
    Vector相对LinkedList增删慢(数组结构)

    3.Vector和ArrayList的区别:
                Vector是线程安全的,效率低
                ArrayList是线程不安全的,效率高
    共同点:都是数组实现的
    4.ArrayList和LinkedList的区别:
                ArrayList底层是数组结果,查询和修改快
                LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
    共同点:都是线程不安全

    5.既然List有三个子类,那么我们应该如何去选择呢?

    查询多用ArrayList
    增删多用LinkedList
    如果都多ArrayList(最常用)

    如有错误之处,欢迎指正。

    邮箱:it_chang@126.com

    stay hungry,stay foolish.
  • 相关阅读:
    使用Code First Migrations依据代码更新数据库结构
    Engine Yard增加对Node.js的支持
    CSS3无前缀脚本prefixfree.js及Animatable介绍
    html5客户端本地存储之sessionStorage及storage事件
    cctype,string,vector
    管理朋友信息程序
    三位数的排列组合
    结构体字节对齐
    习题3.13
    OPENCV用户手册之图像处理部分(之一):梯度、边缘与角点(中文翻译)
  • 原文地址:https://www.cnblogs.com/csiOS/p/8662717.html
Copyright © 2011-2022 走看看