Set无序,元素唯一 常用实现类有HashSet,TreeSet

List有序的,可以重复 常用实现类有ArrayList,LinkedList

Map是以键值出现的 常用实现类有HashMap,TreeMap

一.基本概念

Java容器类库的用途是保存对象,根据数据结构不同将其划分为两个不同的概念

1、  Map,一组键值对(key-value)对象的序列,可以使用key来查找value,其中key是不可以重复的,value可以重复。我们可以称其为字典或者关联数组。其中HashMap是无序的,TreeMap是有序的,Hashtable是线程安全的。

?         int size() : 返回此集合中元素的个数

?         boolean isEmpty() : 测试此集合是否为空

?         boolean contains(Object element) : 测试此集合中是否有该元素

?         Iterator iterator() : 返回此集合中的各个元素进行迭代的迭代器

?           boolean containsAll(Collection> c) : 判定此集合是否包含给定的一组元素,包含返回true,否则false

?           boolean addAll(Collection extends E> c) : 将指定集合中的所有元素都添加到当前集合中

?           void clear() : 移除此集合中的所有元素

?           boolean removeAll(Collection> c) : 移除此集合中那些也包含在指定集合中的元素(求集合的差集)

?           boolean retainAll(Collection> c) : 仅保存此集合中那些也包含在指定集合中的元素(求集合的交集)

d)        将集合转换成Object类型的对象数组

1.     List接口及实在现类

List可以将元素维护在特定的序列中,并且答应一个相同元素在集合中多次出现。List接口在Collection接口的基础上增加了大量的方法,使得可以在List中间插进和移除元素。除了Abstract类之外,在学习中比较常用的类有ArrayList(基于数组实现),LinkedList(基于循环链表实现),Vector(基于数组实现,线程安全)

List接口中提供的面向位置操纵的各种方法:(集合中已有的方法略往)

?           void add(int index, E element) : 在列表的指定位置插进指定元素。

?           boolean addAll(int index, Collection extends E> c) : 将指定集合中的所有元素插进到集合中的指定位置。

?           E get(int index) : 返回集合中指定位置的元素。

?           int indexOf(Object o) : 返回指定对象在集合中第一次出现的索引,从0位置开始,返回-1为不存在该元素。

?           int lastIndexOf(Object O) : 返回指定对象在集合中最后一次出现的索引位置,返回-1为不存在。

?           ListIterator listIterator() : 以正确的顺序返回集合中元素的列表迭代器。

?           ListIterator listIterator(int index) : 以正确的顺序返回集合中元素的列表迭代器,从集合中指定的位置开始。

?           E remove(int index) : 移除集合中指定位置的元素。

?           E set(int index, E element) : 用指定元素替换集合中指定位置的元素。

?           List subList(int fromIndex, int toIndex) : 返回集合中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图。

List在数据结构中分别表现为数组、向量、链表、堆栈、队列等形式。

?  ArrayList的特点、实现机制及使用方法

a)      ArrayList特点:

ArrayList顾名思义,它是用数组实现的一种线性表。常规数组不具备自动递增的功能,但是ArrayList在使用时我们不必考虑这个题目。可以直接按位置进行索引,查找和修改速度较快,缺点是插进或者删除速度较慢。在执行插进删除时调用的是System.arraycopy方法,是一个native方法。

b)      ArrayList的实现机制:

在JDK源码中可以看到ArrayList总共只有两个属性,一个是Object数组类型的elementData,一个是int型的size。

在构造方法中也可以看到,无参构造方法调用的是this(10),调用的带一个参数的构造方法,默认无参构造方法分配一个size为10的数组。按照Collection接口中定义的构造方法,它必须有一个通过其它集合对象构造自身对象的方法。这是一个相对比较简单的线性表。并且JDK中提供了大量的比较好用的方法可以使用。该动态数组在存储空间不足时按照下面方法重新分配空间:

a)      Vector的特点:

ArrayList实现的是一种动态数组,LinkedList是一种双向循环链表,Vector并未在前两者的基础上做实现,而是直接实现了List接口。Vector中的所有方法前面都有一个synchronized关键字做修饰。Vector是有序可重复的。

Set(集合):

Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。

Set接口主要实现了两个实现类:

HashSet : HashSet类按照哈希算法来存取集合中的对象,存取速度比较快

TreeSet : TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。

java容器的理解_java容器的理解相关推荐

  1. java static 变量共享_java中如何理解多个对象共享同一个静态成员变量?

    展开全部 要理解这个问题首先要知道一点,就是java的静态成62616964757a686964616fe59b9ee7ad9431333433643133员变量是有一个独立的存储空间的. 假设一个类 ...

  2. java映射理解_Java反射的理解

    Java反射的理解 反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释. 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的.于是我们直接对这个类进行实例化,之后使用这个 ...

  3. java stream 理解_java Stream的理解

    流是 Java 中最重要的基本概念之一.文件读写.网络收发.进程通信,几乎所有需要输入输出的地方,都要用到流. 流是做什么用的呢?就是做输入输出用的.为什么输入输出要用"流"这种方 ...

  4. java多态知乎_Java多态的理解

    作者:程序狗 链接:https://www.zhihu.com/questio... 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 不请自来,C++的多态不太清楚. ...

  5. java arraylist 实现原理_Java进阶--深入理解ArrayList实现原理

    编辑推荐: 文章主要介绍ArrayList的继承关系,ArrayList的方法使用和源码解析,它提供了动态的增加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小,希望对您 ...

  6. java list主要实现_java容器-list的常用实现及原理

    list是个一唯的线性存储容器.我们可以把它比喻成一个竹签子,你可以把山楂.橘子串在上面,也可以把鸡翅.羊肉串在上面.吃的时候你可以从头.尾或者中间任何地方下口. 我们下面着重介绍下两个常用的实现,A ...

  7. java的多态怎么理解_JAVA多态的理解

    面向对象的三大特性:封装.继承.多态,其中最难理解的就是多态 以下是网上某大神给的一个例子: 1.继承关系 class A { public String show(D obj){ return (& ...

  8. java简单的异常_Java的简单理解(8)-异常(Exception)

    Java 异常处理 异常处理机制是Java语言中一个独特之处,它为开发稳定的软件系统提供了有力的支持.它主要使用捕获异常和声明抛弃异常两种方法来处理程序中可能出现异常的语句块,其中捕获异常的方法是一种 ...

  9. java对象序列化作用_Java学习之——理解对象序列化

    Java的对象序列化就是把对象写入到输出流中,用来存储或传输:反序列化就是从输入流中读取对象.简单的来说是指将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列 ...

  10. java映射的概念_Java 反射 概念理解

    文章来源:http://hollischuang.gitee.io/tobetopjavaer/#/basics/java-basic/reflection 反射 反射机制指的是程序在运行时能够获取自 ...

最新文章

  1. intellij idea cpu占用率太大太满 运行速度太慢解决方案
  2. Winform中实现ZedGraph曲线图的图像复制到剪切板、打印预览、获取图片并保存、另存为的功能
  3. Altiris™ IT Management Suite 7 Release Notes
  4. VUE使用lodop实现前端打印页面指定内容
  5. php header 刷新,一个离奇的php header函数问题的解决
  6. JSP实用教程(2)——JSP语法
  7. 别再说找不到web前端项目练手了,这套最全的前端实战案例请拿去
  8. ESP8266+WIFI继电器初识
  9. QGC调试px4固件飞控
  10. Tushare Day7—— 第19章投资组合理论及拓展
  11. html 外联 变 内联,Html 内联元素、外联元素 和 可变元素
  12. explore进程和linux,解析Svchost.exe和Explorer.exe两大系统进程(zt)
  13. 112、工作繁忙,随口胡说;接近胡说,敷衍而已
  14. 一政网给了我公考上岸的机会
  15. 解决Android Studio配置JPush极光推送错误方案
  16. IDEA的ultimate(最终版)与community(社区版)的区别?
  17. Kettle 实现数据同步
  18. 后处理方法NMS、Soft-NMS、 Softer-NMS、WBC、DIoUNMS 、NMS替代算法Confluence
  19. Truth or dare - 真心话大冒险片尾曲
  20. Python编程之求数列20项和

热门文章

  1. Python 对象的绑定方法
  2. 如何高效设计游戏——从抽奖模型到圆桌算法
  3. mac+ffmpeg+php,mac折腾安装ffmpeg小记
  4. 深度学习基础系列(六)| 权重初始化的选择
  5. Lesson 1#13 作业
  6. 线性查找算法(BFPRT)
  7. redis持久化(persistence)
  8. IE8 SVG Viewer下一些对象属性和方法
  9. 在RichEdit中插入GIF图片的方法
  10. 不要用面向对象编程分散新手程序员的注意力