zoukankan      html  css  js  c++  java
  • Java 集合:(一)集合框架概述

    一、集合框架概述

      1、为什么要使用集合?

        一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。
        另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。
        不管是哪一种数据结构,其实本质上都是容器来着,就是用来装对象的。因此,我们就要搞清楚两点:(1)如何存储(2)存储特点

      2、数组

        (1)数组结构

        •  逻辑结构:线性的
        •     物理结构:顺序的存储结构
        •     申请内存:一次申请一大段连续的空间,一旦申请到了,内存就固定了
        •     存储特点:所有数据存储在这个连续的空间中,数组中的每一个元素都是一个具体的数据(或对象),所有数据都紧密排布,不能有间隔。

        (2)如图所示:

          

          

        (3)常用操作

            a、查询:每一个元素都有一个数值下标,可以通过下标瞬间定位到某个元素

           b、增加:

          •  先使用 total 变量辅助记录实际存储元素个数
          •    从尾部增加:数组名[total++]=新元素
          •    从其他位置插入:先把index位置开始所有元素后移,然后数组名[index]=新元素

          c、删除:先把index后面的元素前移,然后数组名[total--]=null

          d、修改: 直接数组名[index]=新元素

        (4)优缺点:

          优点:按索引查询效率高

          缺点:添加/删除效率低,因为都涉及到移动元素;无法直接获取有效元素的个数,需要total来辅助

          如图所示:

          

          

      3、数组和集合对比

        数组在内存存储方面的特点:
          ① 数组初始化以后,长度就确定了。
          ② 数组声明的类型,就决定了进行元素初始化时的类型
        数组在存储数据方面的弊端:
          ① 数组初始化以后,长度就不可变了,不便于扩展
          ② 数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高。
            同时无法直接获取存储元素的个数
          ③ 数组存储的数据是有序的、可以重复的。---->存储数据的特点单一
          ④ 数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便,同时效率不高
          ⑤  数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象,而且对象的类型可以不一致。
        Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。
     

    二、集合的使用场景

      1、使用场景

       

    三、集合框架

      1、集合框架

        为了可以满足用户数据更多种的逻辑关系,而设计的一系列的不同于数组的可变的聚合的抽象数据类型。这些接口和类在java.util包中,因为类型很丰富,因此我们通常称为集合框架集。

      2、分类

        Java 集合可分为 Collection 和 Map 两种体系
          Collection接口:单列数据,定义了存取一组对象的方法的集合
            List:元素有序、可重复的集合
            Set:元素无序、不可重复的集合
          Map接口:双列数据,保存具有映射关系“key-value对”的集合
        Collection 接口继承树:
          

          

        Map 接口继承树:
        

        

      3、集合系列框架

        

    四、结构说明

       1、Collection接口:层次结构中的根接口。Collection 表示一组对象,这些对象也称为 Collection 的元素。一些 Collection 允许有重复的元素,而另一些则不允许。一些 Collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List、Queue)实现。此接口通常用来传递 Collection,并在需要最大普遍性的地方操作这些 Collection。

        (1)List:有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

       (2)Queue:队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。

       (3)Set:一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。

           SortedSet 进一步提供关于元素的总体排序 的 Set。这些元素使用其自然顺序进行排序,或者根据通常在创建有序 set 时提供的 Comparator进行排序。该 set 的迭代器将按元素升序遍历 set。提供了一些附加的操作来利用这种排序。

      2、Map接口:将键映射到值(key,value)的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。

         SortedMap接口:进一步提供关于键的总体排序 的 Map。该映射是根据其键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的 Comparator 进行排序。

    五、

  • 相关阅读:
    西游之路——python全栈——Django之ORM操作
    西游之路——python全栈——django中orm的使用(1)
    西游之路——python全栈——django中orm的使用(2)
    西游之路——python全栈——Django中模型类中Meta元对象了解
    西游之路——python全栈——自定义用户认证
    西游之路——python全栈——CRM项目之Kingadmin开发
    记录表
    flask 引入redis 替换原生session存储session(flask-session)
    综合
    AD域(活动目录) bat脚本探究
  • 原文地址:https://www.cnblogs.com/niujifei/p/14657384.html
Copyright © 2011-2022 走看看