为什么需要数组?是为了存储一组相关类型的变量,且可以按照统一的方式进行操作。什么数组?数组是一种数据类型,存储相同数据类型的一种数据。声明一个变量是在内存中开辟一个空间,声明数组就是在内存中开辟一连串连续的空间。怎样使用数组?数组的定义按照其元素值的初始化可分为动态初始化和静态初始化。动态初始化:定义数组时只指明长度,由系统为数组分配初始值示例:int[] …
arrays.copyof
ArrayList 是我们常用的工具类之一,但是在多线程的情况下,ArrayList 作为共享变量时,并不是线程安全的。主要有以下两个原因:1、 ArrayList 自身的 elementData、size、modCount 在进行操作的时候,都没有加锁;2、这些变量没有被 volatile 修饰,在多线程的情况下,对这些变量操作可能会出现值被覆盖的情况;如 …
我们上一篇学习了ArrayList,它的添加操作在单线程下是安全的,但是在多线程场景中会存在数据被覆盖等线程不安全的情况,如果我们需要在多线程环境下使用集合类怎么办呢,今天勾勾带你解决这个问题!Collections工具类我们可以使用java.utils.Collections工具类将 ArrayList转换为线程安全的集合: &nbs …
1.数据结构特点ArrayList底层数据结构是一个数组,查询元素速度快,增删速度稍慢2.几个概念:(1)DEFAULT_CAPACITY: 表示数组的初始大小,默认10(2)size: 表示当前数组的大小(3)modCount: 统计当前数组元素被修改的次数,只要修改,就+13.空参构造方法初始化public ArrayList() {实际大小为{},长度 …
ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问,实现了Cloneable接口,能被克隆。这里列出2个我比较关系的方法(add、remove)一、Add可以发 …
在我们需要保证线程安全的时候,如果使用到Map,那么我们可以使用线程安全的ConcurrentHashMap,ConcurrentHashMap不仅可以保证线程安全,而且效率也非常不错,那有没有线程安全的List呢?答案是有,那就是CopyOnWriteArrayList。今天我们就一起来了解一下CopyOnWriteArrayList,看它是如何巧妙的保证 …
一、写入时复制(CopyOnWrite)思想写入时复制(CopyOnWrite,简称 COW)思想是计算机程序设计领域中的一种通用优化策略。其核心思想是,如果有多个调用者(Callers)同时访问相同的资源(如内存或者是磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者修改资源内容时,系统才会真正复制一份专用副本(private co …
一、名词解释内存泄漏(memory leak)含义:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。内存溢出(out of memory):简称OOM含义:程序申请内存时,没有足够的内存分配给使用者注:内存泄漏的堆积最终会导致内存溢出二、OOM常见报错信息常见报错有下面2类:java.lan …
如果需要查看排版好看的请搜索微信公众号放开我我还能学前言这次我们介绍另一种时间复杂度为O(nlogn)的排序算法叫做归并排序。归并排序在数据量大且数据递增或递减连续性好的情况下,效率比较高,且是O(nlogn)复杂度下唯一一个稳定的排序。自顶向下的归并排序归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列 …
前言写时复制(Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略。其核心思想是,如果有多个调用者同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这个过 …