文档章节

Java容器之List小结

小灰灰Blog
 小灰灰Blog
发布于 2017/09/07 20:21
字数 310
阅读 20
收藏 0

列表

List, ArrayList, LinkedList, ArrayCopyOnWriteList, Vector

简述

1. 列表划分为线程安全和线程非安全两类,其中:

线程安全: Vector, ArrayCopyWriteList

线程非安全:ArrayList, LinkedList

2. 底层存储

数组: ArrayList Vecotr ArrayCopyWriteList

链表:LinkedList

3. 使用场景

ArrayList

  • 底层为数组,适合随机访问
  • 动态插入删除可能涉及到数组长度重新分配

LinkedList

  • 底层为链表,适合频繁删除新增的场景
  • 随机访问不友好,需要遍历

Vector

  • 线程安全
  • 所有的方法都加锁,导致性能较差

CopyOnWriteArrayList

  • 线程安全
  • 读方法不加锁;修改方法加锁,一次只能一个线程访问
  • 修改时,会拷贝一份内容出来,对拷贝的结果进行操作,最后覆盖之前的内容

4. 特性

  • List 是有序的
  • ArrayList 默认空间大小为10
  • new ArrayList<>() 内部的数组实际上引用的是一个空数组
  • ArrayList 扩容规则
    • 增加原来空间大小的一半
    • 如果依然塞不下,则扩充到正好填充满的情况
  • 排序
    • Collections.sort(list, new Comparator(){xxx})
    • List的内容,实现了Comparater接口后,可以直接调用 Collections.sort(list);

© 著作权归作者所有

共有 人打赏支持
小灰灰Blog
粉丝 182
博文 187
码字总数 326577
作品 0
武汉
程序员
私信 提问
Android编程之SparseArray详解

最近编程时,发现一个针对HashMap<Integer, E>的一个提示: 翻译过来就是:用SparseArray<E>来代替会有更好性能。 那我们就来看看源码中SparseArray到底做了哪些事情: 一、构造 从构造方法我...

天下杰论
2013/06/24
0
2
【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank
06/21
0
0
带你了解源码中的 ThreadLocal

这次想来讲讲 ThreadLocal 这个很神奇的东西,最开始接触到这个是看了主席的《开发艺术探索》,后来是在研究 ViewRootImpl 中又碰到一次,而且还发现 Android 中一个小彩蛋,就越发觉得这个东...

请叫我大苏
07/20
0
0
Spring Boot整合模板引擎jsp

jsp也算是一种模板引擎吧。整合jsp前,先说一下运行SpringBoot项目的几种方式 1. 运行SpringBoot项目的几种方式 1.1 使用内嵌Tomcat运行项目 在IDE中右键运行启动类,也就是直接直接运行App...

yysue
06/15
0
0
你不知道 Java 10 的 5 件事

局部变量类型推断是有争议的热点,但Java 10在JVM中的垃圾收集和容器识别上带来了可喜的变化。 关于本系列 所以你认为你了解Java编程? 事实是,大多数开发人员只是浮于Java平台的表面上,仅...

ismdeep
04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

码云项目100,水一发

简单回顾一下: 早期构想最多的,是希望能将PHP一些类和编码分区做得更细,所以很多尝试。但不得不说,PHP的功能过于单一,是的,也许写C/C++扩展,可以解决问题,那我为什么不用C#或者Golan...

曾建凯
今天
3
0
Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
4
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
3
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
6
0
小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部