一、AbstractCollection

提供了集合的最大实现
继承该类,必须实现size()和iterator(),因为该类操作集合都是通过iterator

二、fail-fast策略

该策略在集合框架中多次被应用
一种多线程对同一集合操作的保护措施,确保操作目标没有被其他线程操作过,与cas思想有异曲同工之处
具体在集合中的实现:
定义一个全局变量modCount,表示集合被修改的次数
每次进行动态操作的时候,modCount++
在Iterator中定义一个全局变量expectedModCount,
每次操作Iterator的时候都会比较modCount和expectedModCount,相等则认为这个集合没有被并发修改,否则会抛出ConcurrentModificationException
所以只要有modCount这个变量的,都是线程不安全的,这种集合最好使用迭代器,因为直接操作不会检查集合有没有被并发修改
使用volatile修饰modCount
被volatile修饰的变量,程序中的每次引用,处理器都会从内存(共享内存)中去读值,而不是从寄存器(线程独有内存)中获取
这使得fail-fast策略更可靠

三、AbstractList

提供了顺序表的最大实现
该类实现了迭代器
继承该类,需要实现get方法,因为迭代器的next是调用了get

四、ArrayList

1.初始容量为10

构造器(集合)和addAll,是深拷贝,因为调的是AbstractCollection.toArray()---->Arrays.copyOf()------>System.arraycopy()

2.多用会用trimToSize

因为顺序表一建立的时候,就会创建一个初始大小的数组,这样就会有空余的位置,调用这个方法可以把多余的位置清理,节约空间
实际长度是存储数组的length,不是全局变量size,size意味着有多个个元素是有数据的

3.扩展容量

默认是增大一半的空间,要考虑int溢出(溢出<0),以及虚拟机的最大内存
必用ensureCapacity(int minSize),需要增大容量的时候,都要调用
都要确认这个容量是否支持,不支持则会扩展容量
防止数组越界

4.toArray,clone都是深度拷贝

5.维护的数组是没有泛型的,当需要获取元素的时候,才去转型

6.对于动态操作

并没有像通常数据结构的书那样子,要移动操作元素后续的节点,而是直接拷贝一份

7.养成好习惯

动态操作了之后,不单单只是移动指针,要将不存在的元素位置设置为null,目的是为了让垃圾收集器工作

8.提供一些安全性低,但是快速的private方法

比如remove(Obj),获取下标了之后,就可以调用一个fastRemove(index),不需要二次比较值

9.subList(from,to)

返回的是该集合的视图,视图是浅拷贝,会直接操作该集合
 

查看原文:http://blog.zswlib.com/2016/10/26/jdk%e9%a1%ba%e5%ba%8f%e8%a1%a8%e7%ac%94%e8%ae%b0/

jdk顺序表笔记的更多相关文章

  1. Oracle性能优化顺序表名称来选择最有效的学习笔记

    选择最有效的顺序表名(只有有效的基于规则的优化)  ORACLE分析器按照订单处理从右到左FROM在FROM子句中的表名,故FROM写在最后的表(基础表 driving table)将被最先处理. 在 ...

  2. C语言学习笔记-顺序表

    #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include "coni ...

  3. 数据结构(java版)学习笔记(二)——线性表之顺序表

    顺序表的优点: 随机存取元素方便,根据定位公式容易确定表中每个元素的存储位置,所以要指定第i个结点很方便 简单,直观 顺序表的缺点: 插入和删除结点困难 扩展不灵活,难以确定分配的空间 容易造成浪费 ...

  4. python学习笔记 | 顺序表的常规操作

    ''' @author: 人人都爱小雀斑 @time: 2020/3/11 8:46 @desc: 顺序表的相关操作 ''' class SequenceList: def __init__(self ...

  5. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  6. 顺序表JAVA代码

        publicclassSeqList{       final int defaultSize =10;     //默认的顺序表的最大长度     int maxSize;          ...

  7. 基于C++的顺序表的实现

    顺序表,是数据结构中按顺序方式存储的线性表,又称向量.具有方便检索的特点.以下,是笔者学习是基于C++实现的顺序表代码,贴上来当网页笔记用. #include <iostream> usi ...

  8. [Java算法分析与设计]--线性结构与顺序表(List)的实现应用

    说到线性结构,我们应该立马能够在脑子里蹦出"Array数组"这个词.在Java当中,数组和对象区别基本数据类型存放在堆当中.它是一连串同类型数据存放的一个整体.通常我们定义的方式为 ...

  9. JAVA实现具有迭代器的线性表(顺序表)

    1,先了解下JAVA类库中的迭代器:JAVA提供了两种基本类型的迭代器,分别用两个接口来表示:Iterator<T>,ListIterator<T>.其中,Iterator&l ...

随机推荐

  1. 【干货分享】流程DEMO-制度发文和干部任免

    流程名: 制度发文和干部任免  业务描述: 当员工在该出勤的工作日出勤但漏打卡时,于一周内填写补打卡申请.  流程相关文件: 流程包.xml  流程说明: 直接导入流程包文件,即可使用本流程  表单: ...

  2. Android之使用Bundle进行IPC

    一.Bundle进行IPC介绍 四大组件中的三大组件(Activity.Service.Receiver)都是支持在Intent中传递Bundle数据的,由于Bundle实现了Parcelable接口 ...

  3. 闭区间套定理(Nested intervals theorem)

    ① ②这里用到了极限与不等关系 ③如果a≠b,那么便不会有$\lim _{n\rightarrow \infty }\left| I_n \right| =0$ ④如果还存在一点c在内,那么同样也不会 ...

  4. Windows平台分布式架构实践 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  5. 实现了一个百度首页的彩蛋——CSS3 Animation简介

    在百度搜索中有这样一个彩蛋:搜索“旋转”,“跳跃”,“反转”等词语,会出现相应的动画效果(搜索“反转”后的效果).查看源码可以发现,这些效果正是通过CSS3的animation属性实现的. 实现这个彩 ...

  6. The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files.

    参照 http://stackoverflow.com/questions/24301986/the-type-java-lang-charsequence-cannot-be-resolved-in ...

  7. Protobuf使用规范分享

    一.Protobuf 的优点 Protobuf 有如 XML,不过它更小.更快.也更简单.它以高效的二进制方式存储,比 XML 小 3 到 10 倍,快 20 到 100 倍.你可以定义自己的数据结构 ...

  8. iOS 之UITextFiled/UITextView小结

    一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...

  9. angular2

    1 class两种写法 (1).直接写 class="{{}}"; (2).数组 arr[a,b,c] ng-class = "arr" 2.class和sty ...

  10. Oracle位图索引

    索引由KEY和Data组成 位图索引的KEY比普通非唯一性索引多包含一个组成部分,分区,分区是将数据按行由内部机制分段以达到比较好的检索效率 位图索引的Data中,该索引KEY中数据值在分区段中按行分 ...