arraylist

附2 volatile

馋奶兔 提交于 2020-01-11 01:43:35
注:在看这篇文章之前,如果对ArrayList底层不清楚的话,建议先去看看 ArrayList 源码解析。 http://www.cnblogs.com/java-zhao/p/5102342.html 1、对于CopyOnWriteArrayList需要掌握以下几点 创建:CopyOnWriteArrayList() 添加元素:即add(E)方法 获取单个对象:即get(int)方法 删除对象:即remove(E)方法 遍历所有对象:即iterator(),在实际中更常用的是增强型的for循环去做遍历 注:CopyOnWriteArrayList是一个线程安全,读操作时无锁的ArrayList。 2、创建 public CopyOnWriteArrayList() 使用方法: List<String> list = new CopyOnWriteArrayList<String>(); 相关源代码: private volatile transient Object[] array;//底层数据结构 /** * 获取array */ final Object[] getArray() { return array; } /** * 设置Object[] */ final void setArray(Object[] a) { array = a; } /** *

集合类线程安全问题

淺唱寂寞╮ 提交于 2020-01-11 01:17:08
文章目录 集合类线程安全问题 ArrayList 并发修改异常 为什么出现 解决方案 写时复制 其他unsafe集合类 集合类线程安全问题 ArrayList 先不谈ArrayList线程安不安全问题,看其源码可以知道,我们在new一个ArrayList的时候,其实底层使用的是数组作为数据结构的。 /** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10 ; /** * Shared empty array instance used for empty instances. */ private static final Object [ ] EMPTY_ELEMENTDATA = { } ; /** * Shared empty array instance used for default sized empty instances. We * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when * first element is added. */ private static final Object [ ] DEFAULTCAPACITY_EMPTY

java集合总结

元气小坏坏 提交于 2020-01-10 22:45:24
一、集合的由来   通常,我们的程序需要根据程序运行时才知道创建多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是数组只能放统一类型的数据,而且其长度是固定的,那怎么办呢?集合便应运而生了! 为了对集合有个更加深入的了解,可以看我的这一篇文章: 用 Java 数组来实现 ArrayList 集合 http://www.cnblogs.com/ysocean/p/6812674.html 二、集合是什么?   Java集合类存放于 java.util 包中,是一个用来存放对象的容器。 注意:①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。    ②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。    ③、集合可以存放不同类型,不限数量的数据类型。 发现一个特点,上述所有的集合类,除了 map 系列的集合,即左边集合都实现了 Iterator 接口,这是一个用于遍历集合中元素的接口,主要hashNext(),next(),remove()三种方法。它的一个子接口 ListIterator

《On Java 8笔记》第十二章:集合

ぃ、小莉子 提交于 2020-01-10 22:22:53
第十二章:集合 泛型和类型安全的集合 基本概念 添加元素组 集合的打印 List 迭代器Iterators ListIterator 链表LinkedList 堆栈Stack 集合Set 映射Map 队列Queue 优先级队列PriorityQueue 集合与迭代器 for-in 和迭代器 适配器方法惯用法 本章小结 文章由On Java8网上翻译版本而来,具体翻译可查看:https://lingcoder.github.io/OnJava8/#/,个人结合Java编程思想第四版进行细小修改 如果一个程序只包含固定数量的对象且对象的生命周期都是已知的,那么这是一个非常简单的程序 通常,程序总是根据运行时才知道的某些条件去创建新的对象。在此之前,无法知道所需对象的数量甚至确切类型。为了解决这个普遍的编程问题,需要在任意时刻和任意位置创建任意数量的对象。因此,不能依靠创建命名的引用来持有每一个对象: MyType aReference ; 因为你从来不会知道实际上会需要多少个这样的引用。 大多数编程语言都提供了某种方法来解决这个基本的问题。Java有多种方式保存对象(应该说是:对象的引用)。例如前面曾经学习过的数组,它是编译器支持的类型。数组是保存一组对象的最有效的方式,如果你想保存一组基本类型数据,也推荐使用这种方式。但是数组具有固定的尺寸,而且在更一般的情况下

Java 集合框架(一):List

半城伤御伤魂 提交于 2020-01-10 14:23:09
在网上找了半天也没有很好的 JAVA 集合框架相关的教程,虽然平时经常使用,但是总感觉有些混乱,也不知晓各个集合或者说容器的特点和使用场景。接下来这一系列的博客希望能将 JAVA 集合框架中的知识做一个总结,也给后来者提供更加清晰的思路。 概述 我们通过这张接口图来了解 JAVA 到底定义了哪些容器。后面我们还会对需要重点掌握的容器的使用和特点以及原理做单独的讲解。 根据各个容器接口的特点,总结下来分为四大类, Set , List , Queue , Map 。后面的章节我们会对他们的几个重要的实现类做具体的讲解。 List List 可以理解为列表,并且 List 接口是 有序的 ,即用户放入的元素的顺序与在 List 中存放的顺序相同。List 接口我们主要用到两个实现类 ArrayList 和 LinkedList. ArrayList ArrayList 实现了 List 接口,所以是有序的,底层通过 Object 数组 实现。允许放入 null 元素。 特点: 容量不固定,可以进行动态扩容。 有序集合(输入等于输出)。 插入的元素可以为 null。 可以随机访问元素(底层为数组)。 改和查效率比较高(相对与 LinkedList 来说,增和删需要移动数组元素的位置)。 为了追求效率,ArrayList 没有实现同步。如果想变为同步容器可以使用 Collections

ArrayList源码学习

偶尔善良 提交于 2020-01-10 12:35:05
本文依照构类定义、造函数、成员变量、方法的顺序进行分析。 一、ArrayList数据结构   通过翻阅源码和《算法》书籍,我们知道ArrayList的底层数据结构就是数组。在源码中通过object elementData[ ]数组来表示了底层结构。我们对ArrayList类的实例的所有操作底层其实都是基于数组的。 二、ArrayList源码分析    2.1 类定义 1 public class ArrayList<E> extends AbstractList<E> 2 implements List<E>, RandomAccess, Cloneable, java.io.Serializable View Code   解释:ArrayList继承AbstractList抽象父类,实现了List接口(规定了List的操作规范)、RandomAccess(可随机访问)、Cloneable(可拷贝,实现该接口,就可以使用Object.clone()方法了)、Serializable(可序列化)。 1)为什么中间要多一个AbastractList抽象父类,是因为这个类中包含了部分通用实现,这样写具体类,比如ArrayList时,只需要专注于本类的具体实现了。 2)在查看了ArrayList的父类AbstractList也实现了List<E>接口

java集合

空扰寡人 提交于 2020-01-10 10:22:43
转自:http://www.cnblogs.com/ysocean/p/6555373.html 一、集合的由来   通常,我们的程序需要根据程序运行时才知道创建多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是数组只能放统一类型的数据,而且其长度是固定的,那怎么办呢?集合便应运而生了! 为了对集合有个更加深入的了解,可以看我的这一篇文章: 用 Java 数组来实现 ArrayList 集合 http://www.cnblogs.com/ysocean/p/6812674.html 二、集合是什么?   Java集合类存放于 java.util 包中,是一个用来存放对象的容器。 注意:①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。    ②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。    ③、集合可以存放不同类型,不限数量的数据类型。 三、Java 集合框架图 此图来源于: http://blog.csdn.net/u010887744/article/details

Sorting a double value of an object within an arrayList

拟墨画扇 提交于 2020-01-10 08:09:28
问题 I'm trying to sort my custom class chromosome by the value of their score attribute which is a double. These chromosomes are stored within an ArrayList. I know I have to use a comparator but I've read so many differing opinions online in the last hour that I'm utterly confused. Attached is my code, if someone could point me in the right direction I would be much appreciated. public class Chromosome { public Gene[] genes; public double score; public Chromosome(int l) { genes = new Gene[l]; }

记录——时间片轮转调度算法模拟程序,用Java实现

谁说胖子不能爱 提交于 2020-01-10 06:53:22
前言 现代计算机系统中,进程是资源分配和独立运行的基本单位,是操作系统的核心概念。因而,进程就成为理解操作系统如何实现系统管理的最基本,也是最重要的概念。进程调度是进程管理过程的主要组成部分, 对于不同的系统和系统目标,通常采用不同的调度算法。采用算法时,则要考虑多方面因素,以便达到最佳效果。在分时系统中,最简单也是较常见的是基于时间片的轮转调度算法,因此采用时间片轮转调度算法来实现模拟进程调度任务的执行过程。 一、目标及分析 目标: 1、合理设计PCB结构,设计模拟指令格式,并以文件形式存储,程序能够读取文件并自动生成指令序列。 2、根据文件内容,建立模拟进程队列,并能采用时间片轮转调度算法对模拟进程进行调度。 分析: 1、首先编写一个进程序列描述文件:包括进程的个数,进程的内容(即进程的功能序列); 2、程序应具有选择、读取、解析进程序列描述文件功能,根据解析的内容生成指令序列; 3、根据时间片轮转算法,应具有设置时间片大小功能; 4、开始调度按钮,进行模拟调度功能,界面显示调度过程; 5、停止调度功能按钮,停止模拟调度功能,整个系统中的进程调度程序都被停止,界面也应该有相应的显示; 6、将调度过程记录为文档。 二、进程序列描述文件 根据分析,进行描述文件设计 模拟指令的格式:操作命令+操作时间 ● C : 表示在CPU上计算 ● I : 表示输入 ● O : 表示输出 ● W

逆波兰计算器

眉间皱痕 提交于 2020-01-10 04:02:54
逆波兰计算器 输入逆波兰表达式,使用栈stack计算器结果 思路分析:根据题目所给的后缀表达式,从左到右,计算。遇到数字,入栈,遇到符号,栈弹出两个数运算,结果入栈,一直运算到最右边的数字 代码实现: package stack ; import java . util . ArrayList ; import java . util . List ; import java . util . Stack ; public class PolanNotation { public static void main ( String [ ] args ) { //先定义逆波兰表达式,为了方便,字符之间用空格隔开 String suffixExpression = "3 4 + 5 * 6 -" ; //思路 //1、先将suffixexpression放到ArrayList中 //2、将ArrayList传递给一个方法,配合栈完成计算 //今日任务,关于集合在做复习 List < String > rpnList = getListString ( suffixExpression ) ; //关于泛型,仅仅知道皮毛,也忘得差不多了!这是说list中的元素仅仅只能够容纳string的吗? System . out . println ( "rpnList = " + rpnList