Java集合02

6.ArrayList

ArrayList的注意事项:

  1. Permits all element , including null ,ArrayList 可以加入null ,并且可以加入多个
  2. ArrayList是由数组来实现数据存储的
  3. ArrayList基本等同于Vector,除了ArrayList是线程不安全(执行效率高)而Vector是线程安全的。在多线程情况下,不建议使用ArrayList

例子1:ArrayList 可以加入null ,且可以加入多个null

package li.collections.list.arraylist;

import java.util.ArrayList;

public class ArrayListDetail {
@SuppressWarnings("all")
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add(null);
arrayList.add("jack");
arrayList.add(null);
System.out.println(arrayList);//[null, jack, null]
} }

6.1ArrayList源码分析

ArrayList构造器:

  1. ArrayList中维护了一个Object类型的数组elementData
transient Object[] elementData; // transient 表示瞬间,短暂的,表示该属性不会被序列化
  1. 当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第一次添加,则elementData扩容为10,再次扩容则扩成elementData当前容量的1.5倍

  2. 如果使用的是在指定大小的构造器,则初始elementData的容量为指定大小,再次扩容则同样扩成elementData当前容量的1.5倍

例子:使用无参构造器

package li.collections.list.arraylist;

import java.util.ArrayList;

public class ArrayListSource {
@SuppressWarnings("all")
public static void main(String[] args) {
//使用无参构造器创建ArrayList对象
ArrayList list = new ArrayList(); //使用for循环给list集合添加1-10数据
for (int i = 1; i < 10; i++) {
list.add(i);
} //使用for循环给list集合添加11-15数据
for (int i = 11; i <= 15; i++) {
list.add(i);
} list.add(100);
list.add(200);
list.add(null); }
}

过程如下:

例子2:使用指定大小的构造器

如果是有参函数的构造器,扩容机制:

(1)第一次扩容,就按照elementData的1.5倍扩容

(2)整个执行的流程还是和前面讲的一样

7.Vector

vector的基本介绍:

1)Vector类的定义说明

2)Vector底层也是一个对象数组,protected Object[] elementData;

  1. Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized

4)在研发中,需要线程同步安全时,考虑使用Vector

7.1Vector源码分析

例子:

package li.collections.list.vector;

import java.util.Vector;

public class VectorTest {
@SuppressWarnings("all")
public static void main(String[] args) {
Vector vector = new Vector();
for (int i = 0; i < 10; i++) {
vector.add(i);
}
}
}

  1. 点击this,光标跳转到有参的构造器中,可以看出传入的initialCapacity是10 ,即调用无参构造器,默认初始容量就是10

  1. vector.add()方法

    ​ 2.1下面这个方法添加数据到vector集合

    ​ 2.2 确定是否需要扩容 条件:minCapacity - elementData.length >0

​ 2.3 如果需要的数组大小不够用,就扩容,扩容的算法:

newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);

Vector底层结构和ArrayList的比较

底层结构 版本 线程安全(同步)效率 扩容倍数
ArrayList 可变数组 jdk1.2 不安全,效率高 如果有参构造则为1.5倍;如果无参第一次为10,第二次及以后则按1.5倍
Vector 可变数组 jdk1.0 安全,效率不高 如果是无参,默认10,满后就按两倍扩容;如果指定大小,则每次按两倍扩

day19--Java集合02的更多相关文章

  1. Java集合02——三分钟了解你必须掌握的两个Set

    上一篇文章我们说到了 List ,本章开始,我们将继续讲解Set相关的知识.关注公众号「Java面典」了解更多 Java 知识点. Set 是一个无重复对象的集合类.值的重复与否是根据对象的 hash ...

  2. Java集合04——fail-fast&fail-safe 详解

    在前几个回合中,我们已经详细了解过了 Java 集合中的List.Set 和 Map,对这部分内容感兴趣的朋友可以关注我的公众号「Java面典」了解.今天我们将为各位介绍集合的失败机制--fail-f ...

  3. Java集合03——你不得不了解的Map

    Map 在面试中永远是一个绕不开的点,本文将详细讲解Map的相关内容.关注公众号「Java面典」了解更多 Java 知识点. Map Map 是一个键值对(key-value)映射接口: 映射中不能包 ...

  4. Java多线程系列--“JUC集合”02之 CopyOnWriteArrayList

    概要 本章是"JUC系列"的CopyOnWriteArrayList篇.接下来,会先对CopyOnWriteArrayList进行基本介绍,然后再说明它的原理,接着通过代码去分析, ...

  5. Java 集合系列 02 Collection架构

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  6. 20180826(02)-Java集合框架

    Java 集合框架 早在Java 2中之前,Java就提供了特设类.比如:Dictionary, Vector, Stack, 和Properties这些类用来存储和操作对象组. 虽然这些类都非常有用 ...

  7. Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)

    概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例 ...

  8. Java 集合系列目录(Category)

    下面是最近总结的Java集合(JDK1.6.0_45)相关文章的目录. 01. Java 集合系列01之 总体框架 02. Java 集合系列02之 Collection架构 03. Java 集合系 ...

  9. Java集合源码分析(三)LinkedList

    LinkedList简介 LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈.队列和双端队列来使用. LinkedList同样是非线程安全 ...

随机推荐

  1. python之名称空间与函数对象

    目录 名称空间 内置名称空间 全局名称空间 局部名称空间 名称的查找顺序 作用域 global关键字 nonlocal关键字 函数名的多种用法 函数的嵌套 名称空间 名称空间就是变量名与变量值绑定关系 ...

  2. 基于PYQT5的截图翻译工具

    基于PYQT5的截图翻译工具 功能介绍 翻译功能 截图功能(快捷键 + 截图存储到剪切板中) 文字识别OCR(基于百度API的文字识别) UI 界面 截图 截图可以使用第三方截图 或 使用PyQt5截 ...

  3. 高通(QCOM)sensor bring up

    高通7150平台 1.添加驱动文件 2.添加编译 3.配置json文件 4.高通默认配置 5.部分sensor外挂电源 6.遇到的问题 1.添加驱动文件 路径:adsp_proc/ssc/sensor ...

  4. Spring IOC 常用注解与使用

    @Component 注解@component代表spring ioc 会把这个类扫描生成Bean实例 @Component public class Role{ @Value("1&quo ...

  5. 物联网lora模块应用案例和LoRawan网关通信技术

    什么是LoRa LoRa(Long Range) 无线通信技术是 Semtech 在2012年开发出来的一款适合物联网使用的射频IC.其设计理念为低功耗.长距离.低成本.网路简单.易于扩展的无线数传技 ...

  6. Java开发学习(五)----bean的生命周期

    一.什么是生命周期 首先理解下什么是生命周期? 从创建到消亡的完整过程,例如人从出生到死亡的整个过程就是一个生命周期. bean生命周期是什么? bean对象从创建到销毁的整体过程. bean生命周期 ...

  7. Java使用类-String

    String,StringBuffer,StringBuild 大佬的理解-><深入理解Java中的String> 1.String 1.1 String 实例化 String st ...

  8. 拥抱 OpenAPI 3:springdoc-openapi 食用指南

    概述 使用 springdoc-openapi 可以快速为 springboot 项目生成规范的 API 文档,具体使用步骤如下: 依赖配置 在 pom.xml 加入内容,即可开始使用: <de ...

  9. Bika LIMS 开源LIMS集——ERD实体关系定义(数据库设计)

    系统数据分类 数据分为四类: template 模板,基础静态数据 static 静态数据,核心静态数据,检测方法等 dynamic 动态数据,样品检测流程数据 organisation 组织机构数据 ...

  10. application.yml 常用基本配置

    前言 在平时的项目开发中,自己对application.yml的配置的写法较为熟悉,现在自己就application.yml常用的配置进行总结如下: 1.Tomcat 配置 server: #设置请求 ...