arraylist_arraylist用法 - CSDN
arraylist 订阅
ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处 展开全文
ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处
信息
属    性
动态数组
外文名
arraylist
位于API文档
java.util.ArrayList
中文名
Array的复杂版本
实现了
ICollection和IList接口
arraylist定义
List接口的大小可变数组的实现,位于API文档的java.util.ArrayList。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector类,除了此类是不同步的。) [1]  size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。add 操作以分摊的固定时间 运行,也就是说,添加 n 个元素需要 O(n) 时间。其他所有操作都以线性时间运行(大体上讲)。与用于 LinkedList实现的常数因子相比,此实现的常数因子较低。每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单在添加大量元素前,应用程序可以使用 ensureCapacity 操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。注意,此实现不是同步的。如果多个线程同时访问一个 ArrayList 实例,而其中至少一个线程从结构上修改了列表,那么它必须 保持外部同步。(结构上的修改是指任何添加或删除一个或多个元素的操作,或者显式调整底层数组的大小;仅仅设置元素的值不是结构上的修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方法将该列表“包装”起来。这最好在创建时完成,以防止意外对列表进行不同步的访问:List list = Collections.synchronizedList(new ArrayList(...));此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间发生任意不确定行为的风险。注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。
收起全文
精华内容
参与话题
  • listarray的区别 --- python

    千次阅读 2018-08-07 19:40:30
    listarray的区别 listarray都可以根据索引来取其中的元素。 list是列表,list中的元素的数据类型可以不一样。array是数组,数组中的元素的数据类型必须一样。 list不可以进行四则运算,array可以进行四则运算...
    list和array的区别

    list和array都可以根据索引来取其中的元素。

    list是列表,list中的元素的数据类型可以不一样。array是数组,数组中的元素的数据类型必须一样。

    list不可以进行四则运算,array可以进行四则运算。

    • code
    x = [1,2,'a']   #x是一个list,list里面的元素的数据类型可以不同
    print(x[0])     #可以根据索引取x的元素
    y = x + x       #列表无法运算,+号只能将两个list拼接
    print(y)        #拼接后的list
    
    import numpy as np
    a = np.array([1,2])  #a是一个数组
    print(a[0])         #可以根据索引来取a中的元素
    b = a + a           #数组可以运算 
    print(b)            #运算后得到的数组
    • result
    1               #列表的第一个元素
    [1, 2, 1, 2]     #拼接后的列表
    
    1               #数组中的第一个元素
    [2 4]           #运算后的数组
    展开全文
  • Arrays.asList() 详解

    万次阅读 多人点赞 2018-05-21 16:49:30
    该方法是将数组转化成List集合的方法。 List<String> list = Arrays.asList("a","b","c"); 注意: (1)该方法适用于对象型数据的数组(String、Integer...) (2)该方法不建议使用于基本数据类型的数组...

    【1. 要点】

     该方法是将数组转化成List集合的方法。

     List<String> list = Arrays.asList("a","b","c");

    注意:

    (1)该方法适用于对象型数据的数组(String、Integer...)

    (2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)

    (3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新

    (4)不支持add()、remove()、clear()等方法

     

     

    【2.Arrays.asList()是个坑】

    用此方法得到的List的长度是不可改变的,

    当你向这个List添加或删除一个元素时(例如 list.add("d");)程序就会抛出异常(java.lang.UnsupportedOperationException)。 怎么会这样?只需要看看asList()方法是怎么实现的就行了:

    public static <T> List<T> asList(T... a) {return new ArrayList<>(a);}

    当你看到这段代码时可能觉得没啥问题啊,不就是返回了一个ArrayList对象吗?问题就出在这里。

    这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList

    它是Arrays类自己定义的一个静态内部类,这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。

    而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的!

    public void add(int index, E element) { throw new UnsupportedOperationException();}

    public E remove(int index) {throw new UnsupportedOperationException();}

     

    总结:如果你的List只是用来遍历,就用Arrays.asList()。

               如果你的List还要添加或删除元素,还是乖乖地new一个java.util.ArrayList,然后一个一个的添加元素。

     

    【3.示例代码】

    package cn.wyc;
    
    import java.util.Arrays;
    import java.util.List;
    
    public class Test {
        public static void main(String[] args){
    
           //1、对象类型(String型)的数组数组使用asList(),正常
            String[] strings = {"aa", "bb", "cc"};
            List<String> stringList = Arrays.asList(strings);
            System.out.print("1、String类型数组使用asList(),正常:  ");
            for(String str : stringList){
                System.out.print(str + " ");
            }
            System.out.println();
    
    
            //2、对象类型(Integer)的数组使用asList(),正常
            Integer[] integers = new Integer[] {1, 2, 3};
            List<Integer> integerList = Arrays.asList(integers);
            System.out.print("2、对象类型的数组使用asList(),正常:  ");
            for(int i : integerList){
                System.out.print(i + " ");
            }
    //        for(Object o : integerList){
    //            System.out.print(o + " ");
    //        }
            System.out.println();
    
    
            //3、基本数据类型的数组使用asList(),出错
            int[] ints = new int[]{1, 2, 3};
            List intList = Arrays.asList(ints);
            System.out.print("3、基本数据类型的数组使用asList(),出错(输出的是一个引用,把ints当成一个元素了):");
            for(Object o : intList){
                System.out.print(o.toString());
            }
            System.out.println();
    
            System.out.print("   " + "这样遍历才能正确输出:");
            int[] ints1 = (int[]) intList.get(0);
            for(int i : ints1){
                System.out.print(i + " ");
            }
            System.out.println();
    
            //4、当更新数组或者List,另一个将自动获得更新
            System.out.print("4、当更新数组或者List,另一个将自动获得更新:  ");
            integerList.set(0, 5);
            for(Object o : integerList){
                System.out.print(o + " ");
            }
            for(Object o : integers){
                System.out.print (o + " ");
            }
            System.out.println();
    
            //5、add()   remove() 报错
            System.out.print("5、add()   remove() 报错:  ");
    //        integerList.remove(0);
    //        integerList.add(3, 4);
    //        integerList.clear(); 
        }
    
    }
    

    输出:

    1、String类型数组使用asList(),正常:  aa bb cc 
    2、对象类型的数组使用asList(),正常:  1 2 3 
    3、基本数据类型的数组使用asList(),出错(输出的是一个引用,把ints当成一个元素了):[I@1540e19d
       这样遍历才能正确输出:1 2 3 
    4、当更新数组或者List,另一个将自动获得更新:  5 2 3 5 2 3 
    5、add()、remove()、clear() 报错: 

     

     

     

     

     

     

     

     

    展开全文
  • ArrayList和ArrayList的区别与

    千次阅读 2017-10-17 15:09:11
    Array 定义:  public abstract class Array:ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuraEquatable  数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值...

    Array

    定义: 

    public abstract class Array:ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuraEquatable


        数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单

     

    		string[] s = new string[3];
    		//赋值
    		s [0] = "a";
    		s [1] = "b";
    		s [2] = "c";
    		//修改
    		s [0] = "a1";

    数组在俩数据中插入数据是很麻烦的,还有我们在声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误。

     

    ArrayList

     

          ArrayList是.Net Framework提供的用于数据存储和检索的专用类,它是命名空间System.Collections下的一部分。它的大小是按照其中存储的数据来动态扩充与收缩的。所以,我们在声明ArrayList对象时并不需要指定它的长度。ArrayList继承了IList接口,所以它可以很方便的进行数据的添加,插入和移除.比如:

     

    		ArrayList list = new ArrayList ();
    		//新增数据
    		list.Add ("abc");
    		list.Add (123);
    		//修改数据
    		list [2] = 345;
    		//移除数据
    		list.RemoveAt (0);
    		//插入数据 
    		list.Insert (0, "hello world");

     

        ArrayList存在不安全类型与装箱拆箱的缺点:

        在list中,我们不仅插入了字符串"abc",而且又插入了数字123。这样在ArrayList中插入不同类型的数据是允许的。因为ArrayList会把所有插入其中的数据都当作为object类型来处理。这样,在我们使用ArrayList中的数据来处理问题的时候,很可能会报类型不匹配的错误,也就是说ArrayList不是类型安全的。既使我们保证在插入数据的时候都很小心,都有插入了同一类型的数据,但在使用的时候,我们也需要将它们转化为对应的原类型来处理。这就存在了装箱与拆箱的操作,会带来很大的性能损耗。

    List

     

        List类是ArrayList类的泛型等效类(ArrayList继承了List接口)。它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。

     

    		List<int> list = new List<int>();
    		//新增数据
    		list.Add(123);
    		//修改数据 
    		list[0] = 345;
    		//移除数据
    		list.RemoveAt(0);

    拓展

    		ArrayList list1 = new ArrayList ();

     

        这句创建了一个ArrayList的对象后把上溯到了List。此时list是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。

        问题就在于List有多个实现类,如LinkedList或者Vector等等,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢?,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用 ArrayList list = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。如果没有特别需求的话,最好使用List list = new LinkedList(); 便于程序代码的重构. 这就是面向接口编程的好处。

    展开全文
  • ListArray 相互转化

    千次阅读 2019-01-03 14:52:40
    1、List to Array 1.1、List 转成 Object 类型数组 使用List的toArray()方法,只能转成 Object 数组,所以有局限性。 @Test public void listToArray() { Object[] array = list.toArray(); //print(array);...

    一、List to Array

    1.1、List 转成 Object 类型数组,但有局限性

    使用List的toArray()方法,只能转成 Object[ ] ,不能强制将数组转换为其他类型(如 int[] 、String[]等),所以有局限性。

    @Test
    public void listToArray() {
    	Object[] array = list.toArray();
    	print(array);//打印
    }
    

    1.2、List 转成 String 类型数组

    使用List的toArray(T[] a)方法 ,可以转成任意类型。

    @Test
    public void listToArray2() {
    	String[] array2 = list.toArray(new String[list.size()]);
    	print(array);//打印
    }
    

    二、Array to List

    2.1、使用Arrays 工具类转成List

    @Test
    public void arrayToList() {
    	List<String> list = new ArrayList<String>(Arrays.asList(array));
    	System.out.println(list.toString());
    }
    

    2.2、Collections 工具类转换List

    @Test
    public void arrayToList2() {
    	List<String> list = new ArrayList<String>(array.length);
    	Collections.addAll(list, array);
    	System.out.println(list.toString());
    }
    

    三、List 、Array 转成字符串,添加分隔符

    @Test
    public void arrayToList3() {
    	// org.apache.commons.lang3.StringUtils.join(Iterable<?>, String)
    	String a = StringUtils.join(list, ",");
    	System.out.println(a);
    	
    	String b = StringUtils.join(array, ",");
    	System.out.println(b);
    }
    

    依赖 apache 的commons-lang3.jar

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.3.1</version>
    </dependency>
    

    四、List 和Array 相互转化工具类

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    
    import org.apache.commons.lang3.StringUtils;
    import org.junit.Test;
    
    public class ListToArrayUtil {
    
    	public static List<String> list = new ArrayList<String>();
    	public static String[] array = { "java", "c++", "c#", "php" };
    
    	static {
    		list.add("aaa");
    		list.add("bb");
    		list.add("cc");
    		list.add("dd");
    		list.add("ee");
    	}
    
    	/**
    	 * List转换成Object类型数组
    	 */
    	@Test
    	public void listToArray() {
    		Object[] array = list.toArray();
    		print(array);
    	}
    
    	/**
    	 * List转换成String类型数组
    	 */
    	@Test
    	public void listToArray2() {
    		String[] array2 = list.toArray(new String[list.size()]);
    		print(array2);
    	}
    
    	/**
    	 * 使用Arrays 工具类转成List
    	 */
    	@Test
    	public void arrayToList() {
    		List<String> list = new ArrayList<String>(Arrays.asList(array));
    		list.add("C");
    		System.out.println(list.toString());
    	}
    
    	/**
    	 * Collections 工具类转换List
    	 */
    	@Test
    	public void arrayToList2() {
    		List<String> list = new ArrayList<String>(array.length);
    		Collections.addAll(list, array);
    		list.add("C");
    		System.out.println(list.toString());
    	}
    
    	/**
    	 * 转成字符串,并增加分隔符
    	 */
    	@Test
    	public void testSplit1() {
    		// org.apache.commons.lang3.StringUtils.join(Iterable<?>, String)
    		String a = StringUtils.join(list, ",");
    		System.out.println(a);
    
    		// org.apache.commons.lang3.StringUtils.join(Object[], String)
    		String b = StringUtils.join(array, ",");
    		System.out.println(b);
    	}
    
    	private static void print(Object[] array) {
    		if (array == null) {
    			System.out.println("array is null");
    		} else if (array != null && array.length == 0) {
    			System.out.println("array length is 0");
    		} else {
    			for (Object string : array) {
    				System.out.print(string + " , ");
    			}
    			System.out.println("");
    		}
    	}
    }
    
    展开全文
  • Java中ArrayList的区别

    万次阅读 2016-08-31 09:50:24
    ArrayList的区别 Array—是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大 的,因为这需要重排数组中的所有数据 List...
  • Java中ArrayList、ArrayList的区别

    万次阅读 多人点赞 2018-09-12 16:00:47
    Array Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。 Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的所有数据。 List ...
  • 关于ArrayList的区别(转载)

    万次阅读 2018-04-16 01:34:53
    ArrayList的区别Array—是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大的,因为这需要重排数组中的所有数据List—是一个...
  • Java ListArray之间的转换

    万次阅读 2019-06-21 17:15:25
    一.Array 转为List 1.实现方法 :java中数组转list使用Arrays.asList(T... a)方法。 public class Array2List { public static void main(String[] args){ List<String> listA=Arrays.asList("dog","cat",...
  • ArrayList 对比

    千次阅读 2019-02-27 18:18:15
    1.ArrayList 都属于顺序表 2.Array 基于索引 (index) 的数据结构,使用索引在数组中搜索和读取, 速度快。获取数据的时间复杂度是 O(1), 但是删除数据开销很大,因为需要重排数组中的所有数据 List 是一个...
  • 下面列出了Array(数组)和ArrayList(集合)的不同点: Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。 Array大小是固定的,ArrayList的大小是动态变化的。 ArrayList提供了更多的方法和特性...
  • Data Structure - Array List (Java)

    万次阅读 2018-12-21 12:16:02
    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击... package chimomo.learning.java.datastructure; ... * @author Created by Chimomo ... impleme...
  • scala Seq Array List 区别

    千次阅读 2019-01-24 11:53:04
    seq()和array() Scala数组与Scala序列是兼容的 - 在需要Seq[T]的地方可由Array[T]代替。最后,Scala数组支持所有的序列操作。 https://www.cnblogs.com/iceelor/p/6039088.html Scala的Seq将是Java的List,Scala...
  • Python——arraylist相互转换

    万次阅读 2017-09-19 10:02:24
    arraylist进行数据类型转换,是使用Python时经常遇见到的情况,下面就展示一个小小的例子。
  • Scala中ArrayList的区别

    千次阅读 2015-12-09 14:03:49
    Difference between Array and List in scala Q:什么时候用Array(Buffer)和List(Buffer)? A: Scala中的List是不可变的递归数据(immutable recursive data),是Scala中的一种基础结构,你应该多用List而不是...
  • python 中listarray互相转换。

    万次阅读 2019-01-22 15:12:56
    array转成list比较简单,如下: #array to list import numpy as np #array模块,但其只支持一维数组,不支持多维数组,也没有各种运算函数。 #matrix=[0 for i in range(4)] #这样定义的数组时list object,可以...
  • C# ArrayList

    千次阅读 2019-03-13 10:35:42
    遇到一个string数组转换成List的情况,用循环处理也可以,不过考虑到C#应该有直接可用的api,网上查到了答案: XXX.ofTtype&lt;&gt;(T).ToList() 以下是一个获取当前系统可用串口的情况,把string[ ] 转...
  • Java中ArrayList的相互转换

    万次阅读 2019-05-22 11:32:29
    1.arraylist String[] array = {"string1","string2","string3"}; //Arrays.asList产生一个Arrays内置的类 其中数组用final表示! List<String> list = Arrays.asList(array); // list.add("stri...
  • java array, list 排序

    千次阅读 2018-08-03 14:22:53
    数组排序: Arrays.sort(); int[] arr = new int[]{1, 5, 3, 2, 4}; Arrays.sort(arr); 输出结果: 1 2 3 4 5  从大到小排序方式: Integer[] arr = new Integer[]{1, 5, 3, 2, 4}; Arrays.sort(arr, new ......
  • listarray的相互转化 ---python

    万次阅读 2018-08-10 10:47:26
    listarray的相互转化 1)list转为array要用numpy模块中的array()函数 #code-python(3.6) import numpy as np x = [1,2,'a'] #x是一个list print(np.array(x)) #list转化为array,数据类型会全部统一 #result...
  • ArrayList的定义和操作

    千次阅读 2016-10-11 14:20:05
    定义数组 scala> val numberArray=new ...numberArray: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) //定义一个长度为10的String类型数组 scala> val strArray=new Array[String](10) strArray: Array[String] =
1 2 3 4 5 ... 20
收藏数 530,917
精华内容 212,366
关键字:

arraylist