转至:http://shmilyaw-hotmail-com.iteye.com/blog/1447631
ArrayList除了下面小细节以外,还有个小细节。
就是下面删除array 10个以上的元素。
首先我是这么写的:
for(int i = 9;i<array.size;i++) array.remove(i);
一开始有50个数据,然后
删除 后还有30个,我就郁闷了,突然想到之前也出现过这种情况。得从最后一个开始删除 ,删除i=10的数后,array删除index为10的后面的会往前走一步。删除 i=11 是删除最初的i=12.
解决方法如下:从最后个开始删除 。
for(int i = array.size()-1;i>9;i--) array.remove(i);
- ArrayList<Integer> col = new ArrayList<Integer>();
- System.out.println("Initial size: " + col.size());
- for(int i = 0; i < 20; i++)
- col.add(i + 10);
显然,上面这段代码再简单不过了,建立一个Interger类型参数的ArrayList.
于是考虑到要从ArrayList删除两个元素,比如10, 25。初步设想的代码如下:
- col.remove(10);
- col.remove(25);
基于这种设想的原因是,既然ArrayList<Integer>里的类型是Integer,我传入一个int的应该可以自动实现autoboxing.那么,如果和设想的一样,col中的10和25两个元素都被删除了。
实际运行的结果不然:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 25, Size: 20
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.remove(ArrayList.java:445)
at CollectionBasics.main(CollectionBasics.java:54)
从错误中间可以看到,提示的是访问数组索引越界了。怎么会这样呢?很显然,传入的10,25被当成索引而不是要移除的元素。
察看java doc里面才发现,里面有两个remove方法,分别定义如下:
- public E remove(int index);
-
- public boolean remove(Object o);
当我们传入int类型的时候,会自动被当成上面那个方法来调用。而下面那个移除某个特定元素的方法是需要传入一个Object对象。所以,为了移除制定的元素而不至于引起混淆的话,可以将传入的int先封装一下:
- col.remove((Integer)10);
- col.remove((Integer)25);
这样结果就对了。
分享到:
相关推荐
ArrayList的removeAll方法是一个常用的集合操作方法,该方法可以从一个ArrayList中删除所有在另外一个集合中的元素。但是,在实际开发过程中,removeAll方法的使用需要 thận重,因为它可能会导致性能问题。 1. ...
ArrayList的设计基于一个可调整大小的数组,它允许我们在列表的任何位置进行添加、删除和查找元素等操作。这个压缩包"arrayList.zip"可能包含了关于ArrayList的源码分析、实现细节以及使用示例。 线性表是一种基本...
如果多个线程同时访问一个ArrayList实例,至少线程修改的一个列表结构,它必须保持外部同步。 (结构上的修改是指添加或删除一个或多个元件,或明确地调整大小背衬阵列的操作;仅设置元素的值不是结构修改。)这是一...
如果多个线程同时访问一个`ArrayList`实例,并且至少有一个线程修改了该列表,则必须保持外部同步。 7. **序列化支持**:`ArrayList`实现了`Serializable`接口,可以通过序列化机制保存其状态。 8. **初始化与预...
ArrayList的核心实现是通过一个Object类型的数组来存储元素。当添加元素时,如果当前容量不足,ArrayList会自动扩容,通常扩容为原来的1.5倍。这种设计使得ArrayList在插入元素时有较好的性能表现,但删除元素特别是...
`remove()`方法是`List`接口中的一个关键操作,用于从列表中删除指定的元素或根据索引移除元素。在使用`remove()`方法时,需要注意一些重要的细节以避免潜在的问题和错误。下面将详细介绍`List.remove()`方法的两种...
在Java编程语言中,ArrayList是集合框架中的一种重要数据结构,它是一个动态数组,可以存储任意类型的对象。ArrayList提供了一种高效的方式来管理大量的元素,并且提供了迭代器(Iterator)来遍历这些元素,使得我们...
- **定义**:`String` 类表示不可变的字符序列,即一旦创建了一个 `String` 对象,它的值就不能改变。 - **用途**:常用于存储固定的文本数据,如数据库连接字符串、文件路径等。 - **特点**: - 不可变性提高了...
如`new ArrayList()`创建一个空的ArrayList,或者`new ArrayList(initialCapacity)`指定初始容量。源码中,elementData数组的初始容量为0,当添加元素时会自动扩容。 2. **添加对象**: 使用`add(E e)`方法将对象...
ArrayList是Java集合框架中的一个重要组成部分,它是基于动态数组实现的列表。在Java 1.8版本中,ArrayList的实现细节和内部工作原理对于理解其性能和行为至关重要。本文将深入探讨ArrayList的源码,解析其实现逻辑...
这是一个非常适合初学者学习编程逻辑和算法的实例,特别是对于Java编程语言的学习者。斗地主是一种广受欢迎的扑克游戏,通常由三名玩家进行,每名玩家会收到17张牌,留三张作为底牌。在游戏开始前,洗牌和发牌是必不...
2. **迭代器(Iterator)**:在Java中,迭代器是一种设计模式,用于遍历集合中的元素,提供了`hasNext()`方法检查是否还有下一个元素,以及`next()`方法获取下一个元素。迭代器模式使得代码对具体的集合实现细节透明...
要创建一个ArrayList,可以使用以下语法: ```java ArrayList<String> stringList = new ArrayList(); ``` 这里,我们定义了一个存储字符串的ArrayList。 3. 添加元素: 使用`add()`方法向ArrayList中添加...
假设我们有一个包含元素"a", "b", "c", "d"的ArrayList,使用迭代器遍历时,游标初始指向第一个元素"a"。如果在遍历过程中删除元素"a",由于ArrayList的删除操作会移动后面的元素来填补空位,原本指向元素"b"的游标...
在这个例子中,`NoSortHashTable`继承了`Hashtable`,并使用了一个`ArrayList`来存储键的顺序。当添加新元素时,除了在哈希表中添加之外,还会将键添加到`ArrayList`中。当移除元素时,也会同步更新`ArrayList`。...
Java中的ArrayList和Vector都是列表(List)接口的实现类,它们在功能上相似,但在细节上存在一些重要的差异。这两个类都是基于数组实现的,但它们的性能特点、线程安全性和扩容策略有所不同。 1. **扩容策略**: ...
在这个"Java小程序"中,我们看到了一个名为`IteratorDemo`的文件,这通常表示这是一个关于Java迭代器(Iterator)的示例。迭代器是Java集合框架的一部分,它提供了一种遍历集合元素的方法,而不必暴露底层的实现细节...
适配器中要包含一个ArrayList,用于存储数据和CheckBox的状态。 ```java public class CustomAdapter extends ArrayAdapter<String> { private ArrayList<String> items; private ArrayList<Boolean> ...