概述
ArrayList简介
-
ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。
-
ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
-
ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。稍后,我们会比较List的“快速随机访问”和“通过Iterator迭代器访问”的效率。
-
ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。
-
ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。
和Vector不同, ArrayList中的操作不是线程安全的! 所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。
初始化添加ArrayList
ArrayList<String> al = new ArrayList<String>();
al.add("a");
al.add("b");
al.add("c");
增加、删除、改值、取位置
ArrayList<String> al = new ArrayList<String>();
// 添加元素
al.add("a");
al.add("b");
al.add("c");
// 删除元素
al.remove("b"); // 删除值为b的元素
al.remove(1); // 删除第0位元素
// 修改元素
al.set(1,"d"); // 修改索引1的值为d
// 查询元素
System.out.println(al.get(2)); // 获取索引2位置的值
System.out.println(al.contains("a")); // 判断元素是否存在,返回 true false
System.out.println(al.isEmpty()); //判断集合是否为空
System.out.println(bl.subList(2,4)); // 取列表里 [2, 4) 索引中的内容
取交集、去除交集
ArrayList<String> al = new ArrayList<String>();
al.add("a");
al.add("b");
al.add("c");
ArrayList<String> bl = new ArrayList<String>();
bl.add("a");
bl.add("b");
bl.add("f");
al.retainAll(bl); // 取交集,al中只会保留与bl相同的元素
System.out.println(al); // [a, b]
System.out.println(bl); // [a, b, f]
// al = [a, b, c] bl = [a, b, f]
al.removeAll(bl); // 去除交集,al中保留与bl不相同的元素
System.out.println(al); // [c]
System.out.println(bl); // [a, b, f]
通过迭代器输出列表元素
// 方法一
Iterator it = bl.iterator(); // 生成迭代器对象
while(it.hasNext()) // 判断还有没有下个元素
System.out.println(it.next()); // 取出下个元素
// 方法二
for (String s : bl) { // 迭代器的for 输出元素
System.out.println(s);
}
Iterator 的缺陷:
Iterator 在迭代时,不可以通过集合对象的方法操作集合的元素
例如在迭代时增加元素会报错:
for(String s: al){
if(s.equals("b"))
al.add("g");
}
因为会发生并发修改异常。ConcurrentModificationException
在迭代器时,只能用迭代器操作元素,可是Iterator方法是有限的。
只有三种操作 ( hasNext、Next、remove )
如果想要其他操作,如添加、修改等,就可以用 ListIterator,ListIterator具备迭代器增删改查功能。
List集合特有的迭代器:LIstIterator (是Iterator的子接口)
ListIterator使用方法:
void add(E o)
将指定的元素插入列表(可选操作)。
boolean hasNext()
以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。
boolean hasPrevious()
如果以反向遍历列表,列表迭代器有多个元素,则返回 true。
E next()
返回列表中的下一个元素。
int nextIndex()
返回对 next 的后续调用所返回元素的索引。
E previous()
返回列表中的前一个元素。
int previousIndex()
返回对 previous 的后续调用所返回元素的索引。
void remove()
从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。
void set(E o)
用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。
注意,remove() 和 set(Object) 方法不是 根据光标位置定义的;它们是根据对调用 next() 或 previous() 所返回的最后一个元素的操作定义的。
示例:
ArrayList<String> al = new ArrayList<String>();
// 添加元素
al.add("a");
al.add("b");
al.add("c");
ListIterator list = al.listIterator();
while(list.hasNext()){
Object obj = list.next();
if(obj.equals("b")){
list.add("d");
}
}
System.out.println(al); // [a, b, d, c]
ArrayList去除对象的重复内容
有一个Person对象,具有年龄和姓名属性。
年龄和姓名一致时才认为是同一个人。
条件: 要求去除重复的同一个人。
import java.util.*;
class Person{
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public Object getName(){
return this.name;
}
public Object getAge(){
return this.age;
}
public boolean equals(Object obj){
Person temp = (Person)obj;
/*
* 判断年龄和姓名相等才返回真
* */
return(this.age == temp.age && this.name.equals(temp.name));
}
}
public class test{
public static void main(String[] args)
{
ArrayList al = new ArrayList<Person>();
// 添加元素
al.add(new Person("li01",12));
al.add(new Person("li01",12));
al.add(new Person("li01",15));
al.add(new Person("li02",18));
al.add(new Person("li03",21));
al.add(new Person("li03",12));
al.add(new Person("li04",36));
al = singleElement(al);
for(Object s :al){
System.out.println(((Person)s).getName() + ".." + ((Person)s).getAge());
}
}
static ArrayList singleElement(ArrayList al){
Iterator it = al.iterator();
ArrayList newAl = new ArrayList();
while (it.hasNext()){
Object obj = it.next();
/*
* contains 内部其实用了indexOf, indexOf 内部再用了 object.equals
* 所以覆盖object.equals方法可以实现去重
* */
if(!newAl.contains(obj))
newAl.add(obj);
}
return newAl;
}
}
最后
以上就是强健板凳为你收集整理的Java 集合框架 ArrayList 使用方法的全部内容,希望文章能够帮你解决Java 集合框架 ArrayList 使用方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复