ArrayList简介
ArrayList类是一个可以动态修改的数组,与普通数组的区别是只需要声明数组名,不需要在开始的时候初始化数组大小,可以动态的添加和删除元素
ArrayList使用方法
ArrayList类位于java.util包中,使用前要导入包,格式为
import java.util.ArrayList;//导入包
使用时需要对类进行初始化,初始化格式为
ArrayList<E> objectName = new ArrayList<>();
其中 objectName为类名
E为泛型数据类型,只能为引用数据类型
基本数据类型和引用数据类型的对应表格为
基本数据类型 | 引用数据类型 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
bool | Boolean |
当数据类型为Integer,名字为IntDemo时,对该类初始化
ArrayList<Integer> IntDeom = new ArrayList<>();//生成一个名为IntDemo的表,存储int型数据
ArrayLIst类的add方法
该方法根据参数的不同有两种形式
add(E element)
对于初始化的IntDemo表,为 add(Integer element)
调用该方法添加前十一个自然数的代码如下
for(int i = 0; i <= 10; i ++){//将十一个自然数添加到表中
IntDemo.add(i);
}
将26个小写英文字母添加到char类型的代码如下
ArrayList<Character> CharDemo = new ArrayList<>();//初始化定义一个char类型的表
for(char element = 'a'; element <= 'z'; a ++){//遍历26个英文字母并添加到表中
CharDemo.add(element);
}
当参数有两个时,方法原型为
add(int index, E element)
index表示数组下标,element表示要添加进去的元素
该添加元素会占用原来元素的位置,后面的元素依次后移一位
如在第一个数组中在0 位置添加数据11时
11,0,1,2........
IntDemo.add(0, 11)
只能在该数组原有下标范围内添加,超过则报错
如IntDemo.add(13,11)则报错越界
ArrayList addAll方法
addAll(Collection<? extends E> c)//将一个集合完整的添加到另一个集合中
如
ArrayList<Integer> IntDemoCopy = new ArrayLIst<>();//创建一个新集合
IntDemoCopy.addAll(IntDemo);//使用addAll方法将IntDemo中的所有元素添加到IntDemoCopy中
addAll(int index, Collection<? extends E> c)//从该集合的某个下标开始添加,一定要判断是否扩展到该下标,如
IntDemoCopy.addAll(5, IntDemo);//从下标开始插入新的一个元素集
在中间插入会动态重组链表,如在1,2,3,4,5的二号下标开始插入7,8的结果为
1,2,7,8,3,4,5
获取其中的元素
get(int index)
根据下标获取元素
ArrayList数据的遍历
1、采用for循环,根据表的长度迭代输出
for(int i = 0; i < IntDemo.size(); i ++){//size是该动态数组容量的大小
System.out.println(IntDemo.get(i));
}
2、采用for each语句,对表进行遍历输出
for(Integer element:IntDemo){
System.out.println(element);
}
3、采用迭代器
迭代器是一个提供了迭代基本规则的接口
public interface Iterator<E>{
boolean hasNext();//判断是否存在下一个元素
E next();//获取下一个元素
void remove();//移除元素
}
对该集合中所有的数据进行迭代,删除其中大于五的数据,进行迭代输出的结果为
Iterator<Integer> it = IntDemo.iterator();//迭代器初始化
//遍历所有数据并输出结果
while(it.hasNext()){//当下一个节点不为空的时候,进行遍历
System.out.println(it.next());//next存储了当前节点的数据值,进行输出
}
//删除该集合中所有大于5的节点的数据值
it = IntDemo.iterator();//由于在上面的遍历中已经到最后一个节点,所以要进行初始化
while(it.hasNext()){//对所有节点进行遍历
if(it.next() >= 5){//当值大于等于5的时候
it.remove();//删除当前节点
}
}
it = IntDemo.iterator();//初始化
while(it.hasNext()){
System.out.println(it.next());
}
修改元素
set(int index, Integer element)//分别对应下标和元素
将该集合中所有大于等于5的数据赋值为0的写法如下
for(int i = 0; i < IntDemo.size(); i ++){
if(IntDemo.get(i) >= 5){
IntDemo.set(i, 0);
}
}
不能用迭代器,因为迭代器中只有删除的方法,没有改变值的方法
删除元素
remove(int index)根据下标进行元素的删除
将该集合中前五个元素删除,由于该集合是动态数组结构,每次删除一个元素集合的结构都会改变,所以只需删除第一个元素五次就能达到删除前五个元素的目的,实现如下
for(int i = 0; i < 5; i ++){
IntDemo.remove(0);
}
remove(object o)//删除出现的第一个元素o
比如删除第一个出现的1
IntDemo.remove(new Integer(1));//删除出现的第一个元素为1的元素
//由于默认情况下,1是int型,而对象的参数是object,要转化为Integer型,int转化为Integer的方法
Integer a = new Integer(1);
删除满足给定集合条件的元素
removeIf(Predicate<? super E> filter)
如删除大于等于5的元素可以写为
IntDemo.removeIf(id -> id >= 5);//删除该集合中所有大于等于五的元素
//lambda写法 参数 -> 条件
//删除所有等于2的写法为
IntDemo.removeIf(id -> id == 2);
//删除所有在区间[2,5]中的元素写法为
IntDemo.removeIf(id -> id >= 2 && id <= 5);
查找元素
contains(Object o);如果包含返回true
如判断是否包含元素1的写法为
if(IntDemo.contains(new Integer(1)){
System.out.println("包含元素1");
}
indexOf(Object o);返回该元素第一次出现的下标,不包含,则返回-
查找元素1第一次出现的下标的写法为
int FirstIndex = IntDemo.indexOf(new Integer(1));
元素排序
Collections类中有sort方法可以对ArrayLIst集合进行排序
import java.util.Collections;
Collections.sort(IntDemo);