[集合框架] List 实现
List 实现分为通用 List 实现和特殊用途的 List 实现。
通用 List 实现
有两个通用的 List 实现 —— ArrayList 和 LinkedList。大多数时候,你可能会使用 ArrayList,它提供了按位置访问的功能并且速度比较快。当你需要同时移动多个元素的时候,可以充分发挥 System.arraycopy 的优势。可以将 ArrayList 看成是没有同步功能的 Vector。
如果你需要经常在 List 的头部添加元素或者遍历 List 并从内部删除元素,那么你可以考虑使用 LinkedList。这些操作在 LinkedList 中需要的是常数时间,而在 ArrayList 中却需要线性时间。不过你会付出性能上的代价,因为在 LinkedList 中按位置访问需要线性时间,而在 ArrayList 中只需要常数时间。如果你想使用 LinkedList,请在你做出决定前在你的系统中测试一下 LinkedList 和 ArrayList 的性能,通常情况下 ArrayList 更快。
ArrayList 有一个调整参数 —— 容器初始值,它表示 ArrayList 在它的数据增长之前可以存放的元素个数。LinkedList 并没有调整参数,并且有 7 个可选的操作,其中一个是 clone。另外 6 个分别是, addFirst, getFirst, removeFirst, addLast, getLast, 和 removeLast。LinkedList 还实现了 Queue 接口。
特殊用途的 List 实现
CopyOnWriteArrayList 是实现了复制到数组进行备份的 List。这个实现非常像 CopyOnWriteArraySet。并不需要进行同步,即使在迭代期间,迭代器也会保证不会抛出 ConcurrentModificationException。这个实现很适合用于维护事件处理器列表,这个列表中的数据很少会改变,但是会频繁地进 行迭代和潜在的时间消耗。
如果你需要同步,那么 Vector 将会比使用 Collections.synchronizedList 创建的 ArrayList 略快。但是 Vector 会有一些遗留的操作,所以在使用 Vector 的时候请尽量使用 List 接口中的方法,或者你确定在以后不会更改 Vector 实现。
如果 List 的大小是固定的 —— 也就是说,你不会调用 remove,add,或任何除了 containsAll 之外的批量操作 —— 那么你还有第三个选择值得考虑一下。那就是 Arrays.asList,具体内容以后再讨论。
[集合框架] List 实现的更多相关文章
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 【目录】JUC集合框架目录
JUC集合框架的目录整理如下: 1. [JUC]JUC集合框架综述 2. [JUC]JDK1.8源码分析之ConcurrentHashMap(一) 3. [JUC]JDK1.8源码分析之Concurr ...
- java面试题——集合框架
先来看一下集合框架关系图 Collection FrameWork 如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └S ...
- Java使用实现面向对象编程:第七章集合框架的解读=>重中之重
对于集合框架,是非常重要的知识,是程序员必须要知道的知识点. 但是我们为什么要引入集合框架呢? 我们之前用过数组存储数据,但是采用数组存储存在了很多的缺陷.而现在我们引用了集合框架,可以完全弥补了数组 ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- Java集合框架练习-计算表达式的值
最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...
- Java 之 集合框架(JCF)
1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点: ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)
一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...
- 【集合框架】JDK1.8源码分析之Collections && Arrays(十)
一.前言 整个集合框架的常用类我们已经分析完成了,但是还有两个工具类我们还没有进行分析.可以说,这两个工具类对于我们操作集合时相当有用,下面进行分析. 二.Collections源码分析 2.1 类的 ...
随机推荐
- hdu 3389 阶梯博弈
题意:1-N带编号的盒子,当编号满足A>B && A非空 && (A + B) % 3 == 0 && (A + B) % 2 == 1则可以从A ...
- C语言感悟
还没接触C语言前,以为代码是一些单词组成的公式,和背单词一样的麻烦.枯燥无味,所以英语基础的很烂的我,对C语言没什么信心. 通过这一段时间的学习,现在对C语言的认识,和最开始时很大不一样.C语言中的代 ...
- Mac下安装Docker
1.去"https://docs.docker.com/docker-for-mac/"下载安装包  2.根据提示安装下载好的Docker.dmg 3.运行Docker 4.在终 ...
- 5.5版本以上”No input file specified“问题解决
.htaccess文件中的 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 在默认情况下会导致No input file specified. 修改成 Rewri ...
- Windows10怎么架设局域网DNS服务器?
已采纳 需要安装Windows组件进行设置.最好是安装服务器版本的Windows. 1. 安装DNS服务 开始—〉设置—〉控制面板—〉添加/删除程序—〉添加/删除Windows组件—〉“网络服务”—〉 ...
- Effective C++ —— 模板与泛型编程(七)
C++ templates的最初发展动机很直接:让我们得以建立“类型安全”的容器如vector,list和map.然而当愈多人用上templates,他们发现templates有能力完成愈多可能的变化 ...
- Mybatis框架简单使用
Mybatis框架简单使用 环境搭建 新建一个JavaWeb项目,在web\WEB-INF\创建lib文件,并且在其下添加Mybatis的核心包以及依赖包,以及Mysql驱动包,junit4测试包等. ...
- 转 Java高级程序员面试题
1.你认为项目中最重要的过程是那些? 分析.设计阶段 尽量找出进度的优先级 2.如果给你一个4-6人的team,怎么分配? 挑选一技术过硬的人作为我的替补.其它人平均分配任务,每周进行全面的任务分配 ...
- ssm框架常见问题
搭建SSM框架时,总是遇到这样那样的问题,有的一眼就能看出来,有的需要经验的积累.现将自己搭建SSM框架时遇到的典型问题总结如下: 一.Struts2框架下的action中无法使用@Autowired ...
- python orm字段解析
null # 是否可以为空 default # 默认值 primary_key # 主键 db_column # 列名 db_index # 索引(db_index=True) unique # 唯一 ...