arraylist

常用集合类性能、优缺点比较

做~自己de王妃 提交于 2020-01-02 01:18:53
转: 常用集合类性能、优缺点比较 我们将对 数组,Dictionary<>, HashTable,List<>,ArrayList 的性能和各自的优缺点做下比较? 一维数组 是一个线性表,相对于其他集合类效率最高,但是使用起来也相对最不方便; Dictionary<>泛型 是基于Hash算法的二维字典表,由于采用Hash算法,查找时间复杂度基本为O(1),相对于HashTable要快,因为使用泛型可以免去拆箱,装箱的操作; HashTable 也是基于Hash算法的二维表,由于其Key和Value 都是object类型,其对数据的存取需要装箱,拆箱的操作,在没有引入泛型概念的VS2003中使用比较广泛,现在推荐使用Dictionary<>取代HashTable; Dictionary<>泛型 和 HashTable 都是不定长的二维数组表,这意味着在不知道数组长度的情况下使用十分简单,并且具有许多方法,如ContainsKey,Add,Remove等,其检索数组的索引不再限于数组的数字索引,只要使用相应地Key的类型来索引就可以了,使用起来十分方便. 至于 List<> 泛型 在VS2005种推荐取代 ArrayList ,其原因也是ArrayList要对每个元素都要进行拆箱,装箱操作. List<> 和 ArrayList 如不经过排序处理,默认查找是使用顺序查找的,不如Hash

常用集合类性能、优缺点比较

余生长醉 提交于 2020-01-02 01:18:36
我们将对 数组,Dictionary<>, HashTable,List<>,ArrayList 的性能和各自的优缺点做下比较? 一维数组 是一个线性表,相对于其他集合类效率最高,但是使用起来也相对最不方便; Dictionary<>泛型 是基于Hash算法的二维字典表,由于采用Hash算法,查找时间复杂度基本为O(1),相对于HashTable要快,因为使用泛型可以免去拆箱,装箱的操作; HashTable 也是基于Hash算法的二维表,由于其Key和Value 都是object类型,其对数据的存取需要装箱,拆箱的操作,在没有引入泛型概念的VS2003中使用比较广泛,现在推荐使用Dictionary<>取代HashTable; Dictionary<>泛型 和 HashTable 都是不定长的二维数组表,这意味着在不知道数组长度的情况下使用十分简单,并且具有许多方法,如ContainsKey,Add,Remove等,其检索数组的索引不再限于数组的数字索引,只要使用相应地Key的类型来索引就可以了,使用起来十分方便. 至于 List<> 泛型 在VS2005种推荐取代 ArrayList ,其原因也是ArrayList要对每个元素都要进行拆箱,装箱操作. List<> 和 ArrayList 如不经过排序处理,默认查找是使用顺序查找的,不如Hash 查找快,但其内置了很多方法,如

How can I access to an ArrayList from another class?

非 Y 不嫁゛ 提交于 2020-01-01 22:32:51
问题 I have an ArrayList of Car : ArrayList<Car> cars = new ArrayList<Car>(); that I fill on my onCreate method of my MainActivity.java with an AsyncTask: new fillCars().execute(); What I want it's to use this ArrayList cars in other class, named ModifyCars.java . My problem it's that after the AsyncTask it's executed on the method onCreate , in all the class MainActivity.java the ArrayList cars it's fill and I can use the data inside of it but when I pass it to ModifyCars.java the size it's

集合类不安全之ArrayList并发修改异常

纵然是瞬间 提交于 2020-01-01 17:22:16
一,故障现象 多线程并发操作ArrayList. java.util.ConcurrentModificationException 并发修改异常 二,导致原因 多线程并发操作ArrayList时,争抢修改,导致的异常 三,解决方案 ①new vector,底层syncronized。但是并发性严重下降 ②Collections.syncronizedList(new ArrayList<>());进行安全封装 ③new CopyOnWriteArrayList<>(); 原理: 写时复制,读写分离的思想. CopyOnWrite容器即写时复制的容器。向一个容器添加元素的时候,不直接往当前容器object[]添加,而是先将当前容器object[]进行copy复制出一个新的容器object[] newElements,然后新的容器object[] newElements里添加元素,添加完元素之后。再将原容器的引用指向新的容器setArray(newElements). 这样做的好处是,可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。 来源: CSDN 作者: 吗达拉 链接: https://blog.csdn.net/weixin_42656794/article/details/103793146

HashSet vs ArrayList Speed? Insert vs Lookup ( Java )

与世无争的帅哥 提交于 2020-01-01 17:11:18
问题 Looking at this question it made me curious as to which to use, Hashset vs ArrayList. The Hashset seems to have a better lookup and ArrayList has a better insert (for many many objects). So I my question is, since I can't insert using an ArrayList, then search through it using a HashSet, I'm going to have to pick one or the other. Would inserting with an ArrayList, converting to a HashSet to do the lookups, be SLOWER overall than to just insert into a HashSet then lookup? Or just stick with

Java集合

六月ゝ 毕业季﹏ 提交于 2020-01-01 15:54:34
集合与数组 数组: (可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。 集合: (只能存储对象,对象类型可以不一样)的长度可变(动态的数组),可在多数情况下使用。 集合的分类: 在java集合中,集合分了两个大的接口,分别为:Collection接口和Map接口。 Collection接口又分为:List接口和Set接口。分别由不同的子类来实现。 集合的方法: 我先创建一个ArrayList对象,用ArrayList来说明一下集合里面的基本方法: Collection coll = new ArrayList(); (1)、size()方法:返回集合中元素个数 System.out.println(coll.size()); (2)、add(Object obj):向集合中添加一个元素(注:现在我没有使用泛型,所以不同类型的数据都能添加到集合中) coll.add("AA"); coll.add(new Date()); coll.add(123); coll.add('B'); (3)、addAll(Collection coll):将形参coll中包含的所有元素添加到当前集合中 Collection coll1 = Arrays.asList(1,2,3); coll.addAll(coll1);

【Java基础】【15Colletion集合】

大兔子大兔子 提交于 2020-01-01 15:54:00
15.01_集合框架(对象数组的概述和使用) A:案例演示 需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息。 Student[] arr = new Student[5]; //存储学生对象 arr[0] = new Student("张三", 23); arr[1] = new Student("李四", 24); arr[2] = new Student("王五", 25); arr[3] = new Student("赵六", 26); arr[4] = new Student("马哥", 20); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } B:画图演示 把学生数组的案例画图讲解 数组和集合存储引用数据类型,存的都是地址值 15.02_集合框架(集合的由来及集合继承体系图) A:集合的由来 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少 B:数组和集合的区别 区别1 : 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值 集合只能存储引用数据类型(对象

Java集合

此生再无相见时 提交于 2020-01-01 15:53:31
集合 概述 集合与数组类似,也是一种引用类型,也可以存放很多个数据。但是数组的长度不可改变,而集合的长度是可变的,所以使用更加方便。 集合有很多种,现阶段我们学习最为简单的 java.util.ArrayList 集合。 构造方法 创建一个ArrayList,最常用的就是默认无参数的构造方法: l public ArrayList() 创建集合的时候要注意尖括号中要指定泛型,也就是里面存放的都是统一的什么数据类型。 注意 ,泛型只能是引用类型,不能是基本类型。 public class Demo01ArrayList { public static void main(String[] args) { // 创建一个集合,存放的全都是String字符串类型的数据 ArrayList<String> list1 = new ArrayList<>(); // 泛型只能写引用类型,不能写基本类型,下面是错误写法! // ArrayList<int> list2 = new ArrayList<>(); } } 常用方法 集合主要是用来存储数据的,所以常用的方法有: l public boolean add(E element) :向集合中放入一个数据对象,参数是被放入的对象,返回值一定为true。 l public E get(int index) :从集合中取出一个对象

Java集合List实现原理

陌路散爱 提交于 2020-01-01 15:52:49
一、集合类结构 Java中的集合包含多种数据结构,如链表、队列、哈希表等。从类的继承结构来说,可以分为两大类,一类是继承自Collection接口,这类集合包含List、Set和Queue等集合类。另一类是继承自Map接口,这主要包含了哈希表相关的集合类。 1.继承Collection接口 2.继承Map接口 二、实现原理 1.List (有序,可重复) 常用的实现List接口的主要有ArrayList、Vector、LinkedList 三个,通过查看jdk底层源码实现,进行简单的要点总结: (1)ArrayList ArrayList是List使用中最常用的实现类,它的查询速度快,效率高,但增删慢,线程不安全。 实现原理: ArrayList底层实现采用的数据结构是数组,并且数组默认大小为10,所以下面两种方式是等同的: List list = new ArrayList(); //没有指定数组大小,使用默认值(默认大小是10) List list = new ArrayList(10); // 指定数组大小为10,传如的参数便是数组的大小,传入为10时,跟默认值相同,所以是等同的 要想清楚的理解上面两中方式,从ArrayList类的构造器就会豁然开朗: 注:不同的jdk版本实现代码有所不同, 现以jdk1.8为例(个人感觉 jdk1.6的底层实现写法更好理解,jdk1

ArrayList和LinkedList的区别

一笑奈何 提交于 2020-01-01 15:49:01
> List子体系特点: A:有序的(存储和读取的顺序是一致的) B:有整数索引 C:允许重复的 <!-- more --> **List的特有功能** ```` void add(int index, E element) :将元素添加到index索引位置上 E get(int index) :根据index索引获取元素 E remove(int index) :根据index索引删除元素 E set(int index, E element):将index索引位置的的元素设置为element ```` **List代码案例** ```` /* * List: * 有序的(存储和读取的顺序是一致的) * 有整数索引 * 允许重复的 * * List的特有功能: * void add(int index, E element) * E get(int index) * E remove(int index) * E set(int index, E element) * * 增删改查 */ public class ListDemo { public static void main(String[] args) { //创建的列表对象 List list = new ArrayList(); //void add(int index, E element) :