arraylist

ArrayList的扩容机制

爷,独闯天下 提交于 2020-02-08 01:44:26
这里结合源码分析一下ArrayList的扩容机制,基于JDK8 参考文章,点击这里 首先分析ArrayList源码中的属性 /** * 默认初始容量大小 */ private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; /** * The array buffer into which the elements of the ArrayList are stored. * The capacity of the ArrayList is the length of this array buffer. * 【 Any empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA * will be expanded to DEFAULT_CAPACITY when the first element is added.】 */ transient Object[] elementData; // non-private to simplify nested class access /** *默认构造函数

ArrayList详解,看这篇就够了

岁酱吖の 提交于 2020-02-07 14:24:47
###简介 ArrayList 是 java 集合框架中比较常用的数据结构了。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。 ###成员变量 ArrayList 底层是基于数组来实现容量大小动态变化的。 /** * The size of the ArrayList (the number of elements it contains). */ private int size; // 实际元素个数 transient Object[] elementData; 注意:上面的 size 是指 elementData 中实际有多少个元素,而 elementData.length 为集合容量,表示最多可以容纳多少个元素。 默认初始容量大小为 10; /** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; 这个变量是定义在 AbstractList 中的。记录对 List 操作的次数。主要使用是在 Iterator,是防止在迭代的过程中集合被修改。

ArrayList数据结构及主要方法分析

a 夏天 提交于 2020-02-07 14:18:53
/** * 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_ELEMENTDATA = {}; 可以看出ArrayList的是基于数组的型式实现的 1.ArrayList的初始空间大小 进入ArrayList源码中可以看到声明的初始容量(default capacity) /** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; 从源码中我们可以得到ArrayList的初始容量为10 2.ArrayList的add()——>append操作(在最后追加) /** * Appends the specified element to the end of this list. * * @param e element to be appended to this list *

ArrayList扩容过程

烈酒焚心 提交于 2020-02-07 02:59:09
#ArrayList动态扩容的全过程。 如果通过无参构造的话,初始数组容量为0,当真正对数组进行添加时,才真正分配容量。每次按照1.5倍(位运算)的比率通过copeOf的方式扩容。 在JKD1.6中实现是,如果通过无参构造的话,初始数组容量为10,每次通过copeOf的方式扩容后容量为原来的1.5倍 例如:数组长度为10,有20个数据要添加,在第10个添加完之后,添加第11个数时,数组扩容为15(10 1.5),当添加第16个数时,数组扩容为22(15 1.5) 来源: CSDN 作者: Sax_no 链接: https://blog.csdn.net/weixin_44867712/article/details/104201059

两种方法删除ArrayList里重复元素

ぃ、小莉子 提交于 2020-02-06 19:25:48
这里有两种方法帮你删除在一个ArrayList里重复的elements。下面的程序片段里,removeDuplicate方法不维护顺序 (Order),而removeDuplicateWithOrder方法会保持顺序 (Order),但会有些性能上的牺牲。 The removeDuplicate Method: /** List order not maintained **/ public static void removeDuplicate(ArrayList arlList) { HashSet h = new HashSet(arlList); arlList.clear(); arlList.addAll(h); } The removeDuplicateWithOrder Method: /** List order maintained **/ public static void removeDuplicateWithOrder(ArrayList arlList) { Set set = new HashSet(); List newList = new ArrayList(); for (Iterator iter = arlList.iterator(); iter.hasNext(); ) { Object element = iter.next();

java day07【Scanner类、Random类、ArrayList 类】

倾然丶 夕夏残阳落幕 提交于 2020-02-06 16:39:21
第1章 API 概述   API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给 我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学 习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。 API使用步骤 1. 打开帮助文档。 2. 点击显示,找到索引,看到输入框。 3. 你要找谁?在输入框里输入,然后回车。 4. 看包。java.lang下的类不需要导包,其他需要。 5. 看类的解释和说明。 6. 学习构造方法。 7. 使用成员方法。 第2章 Scanner类   了解了API的使用方式,我们通过Scanner类,熟悉一下查询API,并使用类的步骤。 2.1 什么是Scanner类   一个可以解析基本类型和字符串的简单文本扫描器。 例如,以下代码使用户能够从 System.in 中读取一个数:   Scanner sc = new Scanner(System.in);    int i = sc.nextInt(); 备注:System.in 系统输入指的是通过键盘录入数据。 2.2 引用类型使用步骤 导包   使用import关键字导包,在类的所有代码之前导包,引入要使用的类型

Java - array与ArrayList的区别

房东的猫 提交于 2020-02-06 16:01:55
可以将 ArrayList想象成一种“会自动扩增容量的Array”。 Array和ArrayList的区别: 1、Array类型的变量在声明的同时必须进行实例化(至少得初花数组的大小),而ArrayList可以只是先声明; 2、Array始终是连续存放的;而ArrayList的存放不一定连续; 3、Array对象的初始化必须指定大小,且创建后的数组大小是固定的;而ArrayList的大小可以动态指定,空间大小可以任意增加; 4、Array不能随意添加、删除;而ArrayList可以在任意位置插入和删除。 基于效率和类型检验,应尽可能使用Array,无法确定数组大小时才使用ArrayList! Array最高效;但是其容量固定且无法动态改变; ArrayList容量可动态增长;但牺牲效率。 来源: https://www.cnblogs.com/yanting18/p/12268821.html

How to get Time Slot interval of 1Hour based two times android

家住魔仙堡 提交于 2020-02-06 09:49:10
问题 How to get Time Slot interval of 1Hour based two times androidI want to store time slot in the arraylist. i have start time and end time. based on start time it should create time slot. For example if start time is 09:00AM and end time is 21:00PM then it should add into arraylist like below 09:00AM 10:00AM 11:00AM 12:00PM 13:00PM 14:00PM ..... so on 21:00PM 回答1: You can do this way : String firstDate = "26/02/2019"; String firstTime = "00:00 AM"; String secondDate = "26/02/2019"; String

How do i access ArrayList that is in another class using for each loop

蓝咒 提交于 2020-02-06 07:55:47
问题 How do I use ArrayList in Message() method loop? I want to access the arraylist and get atributes of the person to form final message in registration process. package sample; import java.util.ArrayList; public class PersonRegister { private static ArrayList<Person> regiter = new ArrayList<>(); public void regitration (String name, String email, String phonennr, int year, int monht, int day, int age){ Person onePerson = new Person(name,email,phonennr, year,monht,day,age); regiter.add(onePerson

java类集

落爺英雄遲暮 提交于 2020-02-06 04:29:13
1.类集实际上就属于动态对象数组,在实际开发之中,数组的使用出现的几率并不高,因为数组本身有一个最大的缺陷:数组长度是固定的。 2.类集有两大接口,Collection 和 Map。 Collection 3.Collection有两个子接口,List和Set List 4.list元素可重复,有子类ArrayList(使用率80%),Vector,LinkedList 5.get()方法是List子接口提供的。如果现在操作的是Collection接口,那么对于此时的数据取出只能够将集合变为对象数组操作。 6.请解释ArrayList与Vector区别 历史时间:ArrayList是从JDK1.2提供的,而Vector是从JDK1.0就提供了。 处理形式:ArrayList是异步处理,性能更高;Vector是同步处理,性能较低。 数据安全:ArrayList是非线程安全;Vector是性能安全。 输出形式:ArrayList支持Iterator、ListIterator、foreach;Vector支持Iterator、ListIterator、foreach、Enumeration。 7.在以后使用的时候优先考虑ArrayList,因为其性能更高,实际开发时很多时候也是每个线程拥有自己独立的集合资源