`
xiaolongfeixiang
  • 浏览: 236842 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ArrayList的复制

 
阅读更多

想复制一个ArrayList,本来想这样使用:

 

ArrayList src = new ArrayList();
// 中间省略了src的赋值操作
// ...
ArrayList dest = new ArrayList();
Collections.copy(dest,src);
 

谁知,报错:

错误:
IndexOutOfBoundsException - 如果目标列表太小而无法包含整个源列表。


经过追踪,发现(全是“空”):

 

public  ArrayList();  // 创建一个初始容量为10的列表

public  ArrayList(int initialCapacity) // 构造一个具有指定初始容量的空列表。

 

最后,采取这样的方式:

 

ArrayList<String> dest = new ArrayList<String>(src);

 

自己学艺不精,原来这么一个构造函数就可以解决问题!

1
1
分享到:
评论
5 楼 xiaolongfeixiang 2010-09-15  
xiao-qiang163 写道

最后打印的是  [abc, 2, 3]  也是奇怪的,
虽然后来看了源码的实现方式,确定就是这样的,
但是一看到 方法名“copy” 就觉得名子和实现方式有点相违背
叫覆盖可能更适合。。。。


呵呵 ,可能是名字起的有待商榷。不过知道效果就行了,呵呵
4 楼 xiao-qiang163 2010-09-15  
ArrayList src = new ArrayList();
        src.add("abc");
        ArrayList dest = new ArrayList(100);
        dest.add("1");
        dest.add("2");
        dest.add("3");
        Collections.copy(dest, src);

        System.out.println(dest);


最后打印的是  [abc, 2, 3]  也是奇怪的,
虽然后来看了源码的实现方式,确定就是这样的,
但是一看到 方法名“copy” 就觉得名子和实现方式有点相违背
叫覆盖可能更适合。。。。
3 楼 xiaolongfeixiang 2010-06-06  
呵呵 是的。我的例子是在List<String>下做的。

忘了改了。谢谢啦!
2 楼 wkling100 2010-06-06  
用对象的clone也是可以的,
ArrayList testList =  src.clone();
1 楼 wkling100 2010-06-06  
楼上的建议可以学习,但是你需要保证你src里面的对象都是String 吧?
这样的代码不知道是否能实现你的需求
ArrayList newDest = new ArrayList(src); 

相关推荐

    ASP .NET ArrayList

    7. 其他操作:还包括CopyTo方法,可以将ArrayList复制到一个数组,以及ToArray方法,可以将ArrayList转换为同类型的数组。 然而,随着.NET Framework的演进,ArrayList逐渐被泛型集合,特别是List所取代。List提供...

    arraylist用法

    - 避免频繁地执行增加和删除操作,因为这些操作可能导致底层数组的复制,从而影响性能。 8. **示例代码** 下面是一个简单的示例,演示了如何使用`ArrayList`: ```csharp ArrayList list = new ArrayList(); ...

    c# ArrayList的使用方法小总结

    - `CopyTo`方法将ArrayList复制到一个数组中。 - `TrimToSize`方法将`Capacity`调整为实际的`Count`值,节省内存。 4. 使用建议: - 尽管ArrayList在早期版本的.NET框架中广泛使用,但在.NET 2.0及更高版本中,...

    ArrayList的实现原理

    - **增长策略**:当元素数量达到数组容量极限时,ArrayList会创建一个新的更大容量的数组,并将旧数组的所有元素复制到新数组中。这个过程称为扩容。为了减少频繁的扩容操作,可以在创建ArrayList时指定初始容量或...

    arrayList排序

    - `Collections.sort()`方法会改变原ArrayList的顺序,如果不想改变原集合,可以先复制一份ArrayList再进行排序。 - 对于大量数据的排序,ArrayList的性能可能不如使用LinkedList,因为ArrayList排序时涉及到大量...

    ArrayList源码Jdk1.8

    - 扩容通常涉及创建一个新的更大的数组,并将旧数组中的所有元素复制到新数组中。 - 默认的扩容策略是将当前容量翻倍,但这可以通过重写`ArrayList`类来调整。 5. **同步性问题**: - `ArrayList`自身不提供任何...

    C#中ArrayList的使用方法

    - CopyTo方法:将ArrayList复制到一个新的数组或已存在的数组中。 总的来说,ArrayList在C#中是一个常用的集合类,尤其适合于需要动态扩展数组大小且对性能要求不高的场景。然而,随着.NET Framework的演进,更推荐...

    ArrayList和Linkedlist1

    4. **安全性问题**:在传递ArrayList到方法或作为返回值时,如果不希望外部修改ArrayList,可以使用`Collections.unmodifiableList()`将ArrayList转换为不可变的视图,或者在方法内部复制一份ArrayList后再进行操作...

    浅析ArrayList内部实现

    浅析ArrayList内部实现 ArrayList是Java集合框架中的一种常用数据结构,能够存储任意多个对象,并且可以自由扩展,弥补了数组的定长的缺陷。下面我们将深入探讨ArrayList的内部实现机理。 ArrayList的内部实现机理...

    深入Java集合学习系列(三):ArrayList实现原理

    当添加元素时,如果当前容量不足以容纳新元素,ArrayList就会创建一个新的更大的数组,并将旧数组中的所有元素复制到新数组中,这个过程称为自动扩容。 对于ArrayList的同步性,需要注意的是,它并不是线程安全的。...

    C# 集合的常用方法

    - `CopyTo(Array array, int index)`: 将ArrayList复制到一个数组中。 2. Stack:栈是一种后进先出(LIFO)的数据结构,常用于临时存储和恢复数据。Stack的主要操作有: - `Push(object item)`: 将元素压入栈顶。...

    ArrayList集合工具类

    然而,插入和删除操作可能涉及到数组的复制和移动,效率相对较低。 2. 动态扩容:当ArrayList中的元素数量超过其当前容量时,它会自动扩容,通常会将容量翻倍,以确保能够继续添加元素。这个过程虽然保证了...

    ArrayList深度剖析与简单实用

    - **构造器**:ArrayList提供了三个构造器,分别是无参构造器(默认容量16)、接受ICollection参数的构造器(将集合元素复制到ArrayList)以及接受初始容量整数的构造器。 - **IsSynchronized属性和Synchronized...

    集合ArrayList测试集合ArrayList测试集合ArrayList测试

    当数组容量不足时,`ArrayList`会创建一个新的更大容量的数组,并将原有元素复制到新数组中。 2. **随机访问**:由于`ArrayList`底层基于数组实现,因此可以快速通过索引访问元素,时间复杂度为O(1)。这使得`...

    java ArrayList的使用与分析

    - 从 Collection 构造:`ArrayList(ICollection c)`,复制集合中的元素到 ArrayList。 - **IsSynchronized 属性**:表明 ArrayList 是否线程安全。若非线程安全,需手动使用 `synchronized` 关键字进行同步控制。 ...

    ArrayList源码分析(含jdk1.8).pdf

    grow方法是ArrayList实际增长容量的实现,它会在添加元素而数组容量不足时被调用,通过新建一个更大容量的数组并将原数组复制过去来实现扩容。 除了上述直接与ArrayList初始化和扩容相关的方法,ArrayList类还定义...

    ArrayList的线程安全测试

    ArrayList提供了诸如Add、Insert、Remove、Clear等方法,这些操作可能涉及到对内部数组的重新分配和复制,如果没有正确同步,多个线程同时进行这些操作可能导致数据损坏。例如,当一个线程正在添加元素并导致数组...

    Copy ArrayList的四种方式

    ArrayList是我们经常会用到的集合类,有时候我们需要拷贝一个ArrayList,今天向大家介绍拷贝ArrayList常用的四种方式。 使用构造函数 ArrayList有个构造函数,可以传入一个集合: public ArrayList(Collection c) {...

    深入Java集合学习系列:ArrayList的实现原理

    这个过程涉及到数组的复制,是ArrayList的一个重要性能考虑点。 ArrayList的增删改查操作主要依赖于其底层的数组。添加元素(add)时,如果数组还有空位,则直接插入;否则,进行扩容并复制元素。删除元素(remove...

    数组模仿ArrayList

    ArrayList在添加元素时,如果数组已满,会创建一个新的更大的数组,并将旧数组中的元素复制到新数组中,然后在新数组的末尾添加新元素。 ```java public void add(T element) { if (size == elements.length) { ...

Global site tag (gtag.js) - Google Analytics