Java ArrayList
1 什么是Java ArrayList
Java ArrayList类使用动态数组来存储元素。它继承了AbstractList类并实现List接口。
Java ArrayList类的核心要点:
- Java ArrayList类可以存储重复的元素。
- Java ArrayList类元素是有序的。
- Java ArrayList类非同步(线程不安全的)。
- Java ArrayList允许随机访问,因为数组基于索引工作。
- 在Java ArrayList类中,操作很慢,因为如果从数组列表中删除任何元素,则需要进行很多移位。
2 Java ArrayList的层次结构
如上图所示,Java ArrayList类扩展了实现List接口的AbstractList类。List接口按层次结构继承了Collection和Iterable接口。
3 Java ArrayList的语法
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
4 Java ArrayList的构造方法
构造方法 | 描述 |
---|---|
ArrayList() | 用于构建一个空数组列表。 |
ArrayList(Collection<? extends E> c) | 用于构建使用集合的元素初始化的List。 |
ArrayList(int capacity) | 用于构建具有指定初始容量的List。 |
5 Java ArrayList的方法
6 Java ArrayList的例子
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();//创建ArrayList
list.add("eric");//添加元素到ArrayList
list.add("jack");
list.add("mark");
list.add("rose");
//打印ArrayList
System.out.println(list);
}
}
输出结果为:
[eric, jack, mark, rose]
7 Java ArrayList遍历元素的方式
有多种遍历集合元素的方法:
- 使用Iterator接口遍历元素。
- 使用for-each循环遍历元素。
- 使用ListIterator接口遍历元素。
- 使用for循环遍历元素。
- 使用forEach循环遍历元素。
- 使用forEachRemaining方法遍历元素。
7.1 使用Iterator接口遍历元素
让我们看一个使用Iterator接口遍历ArrayList元素的示例。
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();//创建ArrayList
list.add("eric");//添加元素到ArrayList
list.add("jack");
list.add("mark");
list.add("rose");
//使用Iterator接口遍历元素
Iterator itr=list.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出结果为:
eric
jack
mark
rose
7.2 使用for-each循环遍历元素
让我们看一个使用for-each循环遍历ArrayList元素的示例。
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();//创建ArrayList
list.add("eric");//添加元素到ArrayList
list.add("jack");
list.add("mark");
list.add("rose");
//使用for-each循环遍历元素
for(String obj:list)
System.out.println(obj);
}
}
输出结果为:
eric
jack
mark
rose
7.3 使用ListIterator接口遍历元素
让我们看一个ListIterator接口遍历元素的示例。
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo {
public static void main(String args[]) {
ArrayList<String> list = new ArrayList<String>();//创建ArrayList
list.add("eric");//添加元素到ArrayList
list.add("jack");
list.add("mark");
list.add("rose");
//使用ListIterator接口遍历元素
ListIterator<String> list1 = list.listIterator(list.size());
while (list1.hasPrevious()) {
String str = list1.previous();
System.out.println(str);
}
}
}
输出结果为:
rose
mark
jack
eric
7.4 使用for循环遍历元素
让我们看一个使用for循环遍历元素的示例。
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo {
public static void main(String args[]) {
ArrayList<String> list = new ArrayList<String>();//创建ArrayList
list.add("eric");//添加元素到ArrayList
list.add("jack");
list.add("mark");
list.add("rose");
//使用for循环遍历元素
System.out.println("使用for循环遍历元素");
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}
}
}
输出结果为:
使用for循环遍历元素
eric
jack
mark
rose
7.5 使用forEach循环遍历元素
让我们看一个使用forEach循环遍历元素的示例。
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo {
public static void main(String args[]) {
ArrayList<String> list = new ArrayList<String>();//创建ArrayList
list.add("eric");//添加元素到ArrayList
list.add("jack");
list.add("mark");
list.add("rose");
//使用forEach循环遍历元素
System.out.println("使用forEach循环遍历元素:");
//Java8的新特性
list.forEach(a->{ //这里使用lambda表达式
System.out.println(a);
});
}
}
输出结果为:
使用forEach循环遍历元素:
eric
jack
mark
rose
7.6 使用forEachRemaining方法遍历元素
让我们看一个使用forEachRemaining方法遍历元素的示例。
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo {
public static void main(String args[]) {
ArrayList<String> list = new ArrayList<String>();//创建ArrayList
list.add("eric");//添加元素到ArrayList
list.add("jack");
list.add("mark");
list.add("rose");
//使用forEachRemaining方法遍历元素
System.out.println("使用forEachRemaining方法遍历元素:");
Iterator<String> itr=list.iterator();
itr.forEachRemaining(a-> //lambda表达式
{
System.out.println(a);
});
}
}
输出结果为:
使用forEachRemaining方法遍历元素:
eric
jack
mark
rose
8 Java ArrayList存储对象
让我们看一个将Student类对象存储在ArrayList中的示例。
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
//定义Student类
class Student{
int rollno;
String name;
int age;
Student(int rollno,String name,int age){
this.rollno=rollno;
this.name=name;
this.age=age;
}
}
class Demo{
public static void main(String args[]){
//创建Student对象
Student s1=new Student(101,"eric",23);
Student s2=new Student(102,"jack",21);
Student s3=new Student(103,"rose",25);
//创建ArrayList集合
ArrayList<Student> al=new ArrayList<Student>();
al.add(s1);//添加元素到ArrayList中
al.add(s2);
al.add(s3);
//获取迭代器
Iterator itr=al.iterator();
//遍历ArrayList的元素
while(itr.hasNext()){
Student st=(Student)itr.next();
System.out.println(st.rollno+" "+st.name+" "+st.age);
}
}
}
输出结果为:
101 eric 23
102 jack 21
103 rose 25
9 Java ArrayList序列化和反序列化
让我们看一个序列化ArrayList对象,然后反序列化对象的示例。
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.io.*;
import java.util.*;
class Demo {
public static void main(String [] args)
{
ArrayList<String> al=new ArrayList<String>();
al.add("eric");
al.add("jack");
al.add("rose");
try
{
//序列化
FileOutputStream fos=new FileOutputStream("file");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(al);
fos.close();
oos.close();
//反序列化
FileInputStream fis=new FileInputStream("file");
ObjectInputStream ois=new ObjectInputStream(fis);
ArrayList list=(ArrayList)ois.readObject();
System.out.println(list);
}catch(Exception e)
{
System.out.println(e);
}
}
}
输出结果为:
[eric, jack, rose]
10 Java ArrayList添加元素
添加元素到ArrayList的不同方法。
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
ArrayList<String> al=new ArrayList<String>();
System.out.println("初始化ArrayList: "+al);
//添加元素到ArrayList
al.add("eric");
al.add("jack");
al.add("rose");
System.out.println("调用add(E e)方法后: "+al);
//指定位置添加元素
al.add(1, "mark");
System.out.println("调用add(int index, E element)方法后: "+al);
ArrayList<String> al2=new ArrayList<String>();
al2.add("lucy");
al2.add("macy");
//调用addAll()方法
al.addAll(al2);
System.out.println("调用addAll(Collection<? extends E> c)方法后: "+al);
ArrayList<String> al3=new ArrayList<String>();
al3.add("John");
al3.add("Rahul");
//指定位置的addAll()方法
al.addAll(1, al3);
System.out.println("调用addAll(int index, Collection<? extends E> c)方法后: "+al);
}
}
输出结果为:
初始化ArrayList: []
调用add(E e)方法后: [eric, jack, rose]
调用add(int index, E element)方法后: [eric, mark, jack, rose]
调用addAll(Collection<? extends E> c)方法后: [eric, mark, jack, rose, lucy, macy]
调用addAll(int index, Collection<? extends E> c)方法后: [eric, John, Rahul, mark, jack, rose, lucy, macy]
11 Java ArrayList删除元素
删除元素的不同方法:
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo {
public static void main(String [] args)
{
ArrayList<String> al=new ArrayList<String>();
al.add("eric");
al.add("jack");
al.add("mark");
al.add("lucy");
al.add("macy");
System.out.println("初始化ArrayList: "+al);
//删除元素
al.remove("Vijay");
System.out.println("调用remove(object)方法后: "+al);
//删除元素
al.remove(0);
System.out.println("调用remove(index)方法后: "+al);
//创建另一个ArrayList
ArrayList<String> al2=new ArrayList<String>();
al2.add("rose");
al2.add("hugo");
//添加元素
al.addAll(al2);
System.out.println("更新list : "+al);
//删除元素
al.removeAll(al2);
System.out.println("调用removeAll()方法后: "+al);
//删除元素
al.removeIf(str -> str.contains("Ajay")); //Lambda表达式
System.out.println("调用removeIf()方法后: "+al);
//清空元素
al.clear();
System.out.println("调用clear()方法后: "+al);
}
}
输出结果为:
初始化ArrayList: [eric, jack, mark, lucy, macy]
调用remove(object)方法后: [eric, jack, mark, lucy, macy]
调用remove(index)方法后: [jack, mark, lucy, macy]
更新list : [jack, mark, lucy, macy, rose, hugo]
调用removeAll()方法后: [jack, mark, lucy, macy]
调用removeIf()方法后: [jack, mark, lucy, macy]
调用clear()方法后: []
12 Java ArrayList retainAll()方法
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
ArrayList<String> al=new ArrayList<String>();
al.add("eric");
al.add("jack");
al.add("mark");
ArrayList<String> al2=new ArrayList<String>();
al2.add("eric");
al2.add("hugo");
al.retainAll(al2);
System.out.println("在保留al2的元素之后迭代这些元素");
Iterator itr=al.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出结果为:
在保留al2的元素之后迭代这些元素
eric
13 Java ArrayList isEmpty()方法
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo{
public static void main(String [] args)
{
ArrayList<String> al=new ArrayList<String>();
System.out.println("ArrayList为空么?: "+al.isEmpty());
al.add("eric");
al.add("jack");
al.add("rose");
System.out.println("插入元素后:");
System.out.println("ArrayList为空么?: "+al.isEmpty());
}
}
输出结果为:
ArrayList为空么?: true
插入元素后:
ArrayList为空么?: false
14 Java ArrayList set()和get()方法
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
/**
* Java ArrayList的例子
*/
import java.util.*;
class Demo {
public static void main(String [] args)
{
ArrayList<String> al=new ArrayList<String>();
al.add("eric");
al.add("jack");
al.add("rose");
System.out.println("更新前: "+al.get(1));
//更新元素
al.set(1,"hugo");
System.out.println("更新后: "+al.get(1));
}
}
输出结果为:
更新前: jack
更新后: hugo
热门文章
优秀文章