【Java】List集合之ArrayList

 月 亮 照 回 湖 心    野 鹤 奔 向 闲 云    我 步 入 你

目录

一、简介

二、操作方法

1. 定义一个ArrayList集合

2. 添加:add()和addAll()

3. 移除:remove() 

4. 获取指定下标元素:get()

5. 获取元素位置:indexOf()和lastIndexOf()

6. 修改:set()

7.获取指定范围数据:subList()

8. 判空:isEmpty()

9. 判断是否存在某元素:contains()

10. 复制:clone()

11. 清除:clear()

12. 获取元素个数:size()

13. 集合的遍历

13.1 常规遍历

13.2 iterator 遍历

13.3 for-each 遍历


一、简介

List集合下共有ArrayList、LinkedList、Vector三种实现方法,但是ArrayList 是 java 集合框架中比较常用的数据结构。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。

每一个ArrayList都有一个初始化的容量(10),该容量代表了数组的大小,随着容器中容量的不断增加,容器的大小也会随着增加。在每次向容器中增加元素时,会进行容量检查,当快溢出时,会进行扩容操作。

ArrayList的特点:

  •    允许插入的元素重复
  •    插入的元素是有序的
  •    动态扩容
  •    非线程安全,异步
  •    基于动态数组的数据结构
  •    擅长随机访问(get set)
  •    每个元素都有对应的顺序索引,可通过索引访问指定位置的集合元素,默认按元素添     加顺序设置索引。

二、操作方法

1. 定义一个ArrayList集合

//方法1
List<Object> list = new ArrayList<Object>();
//方法2
ArrayList<Object> list = new ArrayList<Object>();

 这两种方法都能成功定义一个ArrayList列表,但是存在一定的差异,具体可以阅读:【Java】集合概述

2. 添加:add()和addAll()

add()和addAll()都是向列表中添加数据。add()是向列表中添加单个元素,即运行一次add()只能添加一个元素,而addAll()是向列表中插入另一个列表,即运行一次addAll()可以添加多个元素。此外add()和addAll()两种方法还可以向指定位置添加元素。

List<Object> list = new ArrayList<Object>();
list.add(1);
list.add(3);
list.add(2);
list.add(2);
System.out.println("list:"+list);
	
//向指定位置添加元素
list.add(2, "A");
System.out.println(list);

 

 由上述代码的输出结果可以看到list集合中元素是按照输入的顺序排列的,并且可以有重复值;通过第二个add()可以看出list可以向指定位置添加元素,该位置及之后的元素顺次后移。

List<Object> list = new ArrayList<Object>();
list.add(1);
list.add(3);
list.add(2);
list.add(2);
System.out.println("list:"+list);
		
List<Object> l = new ArrayList<Object>();
l.add(1.0);
l.add(3.0);
l.add(2.0);
		
//添加一个集合
list.addAll(l);
System.out.println(list);
		
//向指定位置添加一个集合
list.addAll(2,l);
System.out.println(list);

 

 由输出结果可以看出,在列表中插入另一个列表时默认从尾部开始插入;如果指定了插入位置,则从指定位置开始插入,原列表元素顺次后移。

3. 移除:remove() 

//移除
list.remove(1);
System.out.println(list);

 

4. 获取指定下标元素:get()

//获取指定下标对应的元素
System.out.println(list.get(1));

  

5. 获取元素位置:indexOf()和lastIndexOf()

indexOf()和lastIndexOf()获取元素在列表中的位置为其索引下标,indexOf()是获取指定元素在列表中第一次出现的位置,lastIndexOf()获取的是指定元素在列表中最后一次出现的位置,如果该元素不存在则返回-1。

//获取指定元素在集合中第一次出现的索引下标
System.out.println(list.indexOf(2));
//获取指定元素在集合中最后一次出现的索引下标
System.out.println(list.lastIndexOf(2));
//若该元素在列表中不存在
System.out.println(list.indexOf(3.0));

 

6. 修改:set()

set()方法用来修改指定位置的数据,可以理解为将原数据替换为新数据,第一个参数为替换的位置,第二个参数为替换的数据,例如下面将第0个位置的数据替换为3.

//根据指定下标修改数据
list.set(0, 3);
System.out.println(list);
		

 

7.获取指定范围数据:subList()

subList()返回的为集合中的某一段数据,通过前后两个下标指定截取范围,注意为前开后闭区间,即截取的[x,y)区间内的数据。

//截取[x,y)的数据
System.out.println(list.subList(0, 3));

 

8. 判空:isEmpty()

//判断集合是否为空
System.out.println(list.isEmpty());

 

9. 判断是否存在某元素:contains()

//判断是否存在某元素
System.out.println(list.contains(3));

 

10. 复制:clone()

//克隆
Object l = list.clone();
System.out.println(l);

 

11. 清除:clear()

//清除
list.clear();
System.out.println(list);

12. 获取元素个数:size()

//获取列表元素个数
System.out.println(list.size());

 

 注意:size()获得的结果是列表中元素的个数,并不是列表的长度,因为列表是一个动态数组,当当前长度即将被用尽时就会自动扩容,但并不一定会占满,因此元素个数不一定等于列表长度。

13. 集合的遍历

13.1 常规遍历

//for循环遍历列表
for(int i=0; i<list.size();i++) {
    System.out.println(list.get(i));
}

 

13.2 iterator 遍历

利用iterator遍历时有两种迭代器:常规的iterator和ListIterator。这两种迭代器的使用方法都一样,但是ListIterator是一个功能更加强大的迭代器,它继承于 Iterator 接口,只能用于各种 List 集合类型及其子类的访问。

//Iterator遍历
Iterator<Object> iterator = list.iterator();
System.out.println("Iterator遍历:");
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}
		
//强大的ListIterator
ListIterator<Object> Iterator = list.listIterator();
System.out.println("ListIterator遍历:");
while (Iterator.hasNext()) {
    System.out.println(Iterator.next());
}

 

13.3 for-each 遍历

//for-each遍历
for(Object obj : list) {
    System.out.println(obj);
}

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离陌lm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值