一、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. Html 制作相册

    本文主要讲述采用Html5+jQuery+CSS 制作相册的小小记录. 主要功能点: Html5进行布局 调用jQuery(借用官网的一句话:The Write Less, Do More)极大的简化 ...

  2. iOS 原生地图地理编码与反地理编码

    当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 ...

  3. 使用Hudson搭建自动构建服务器

    环境: ubuntu1404_x64 说明: 使用hudson和git搭建自动构建服务器的简单示例 安装hudson及相关插件 安装hudson 安装命令如下: sudo sh -c "ec ...

  4. 超全面的.NET GDI+图形图像编程教程

    本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ (*^_^*) 本人也为了学习深刻,另一方面也是为了 ...

  5. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  6. 从史上八大MySQL事故中学到的经验

    本文列举了史上八大MySQL宕机事件原因.影响以及人们从中学到的经验,文中用地震级数来类比宕机事件的严重性和后果,排在最严重层级前两位的是由于亚马逊AWS宕机故障(相当于地震十级和九级). 一.Per ...

  7. JavaScript多线程之HTML5 Web Worker

    在博主的前些文章Promise的前世今生和妙用技巧和JavaScript单线程和浏览器事件循环简述中都曾提到了HTML5 Web Worker这一个概念.在JavaScript单线程和浏览器事件循环简 ...

  8. [MFC] MFC 查找其他窗口句柄 操作其他窗口

    请直接查找CWnd类!!! CWnd* cWnd; cWnd= cWnd->FindWindowW(L"kwmusicmaindlg",NULL); CRect cRect; ...

  9. Python标准模块--threading

    1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...

  10. 《JavaScript 源码分析》之 jquery.unobtrusive-ajax.js

    /*! ** Unobtrusive Ajax support library for jQuery ** Copyright (C) Microsoft Corporation. All right ...