Java集合框架——ArrayList
2021/10/6 20:11:03
本文主要是介绍Java集合框架——ArrayList,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
集合
一:集合概念
对象的容器,定义了对多个对象的进行操作的常用方法,可实现类似于数组的功能。
二:集合和数组的区别
- 数组的长度是固定的,集合的长度是可变化的
- 数组可以存储基本数据类型和引用数据类型,而集合只能存储引用数据类型(即对象)
Colection父接口
- 方法
- boolean add(Object obj) // 添加一个对象
- booleadn addAll(Collection c) // 将一个集合中所有对象添加到此集合中
- void clear() // 清空集合中的所有元素
- boolean contains(Object o) // 检查此集合中是否包含o对象
- boolean isEmpty() // 判断此集合是否为空
- boolean remove(Object o) // 从此集合中移除o对象,存在的话删除对象o的单个实例
- int size() // 返回此集合中元素的个数
一:集合中存储的实际上是对象的地址,clear()方法是将集合中对象的地址删除,对象本身是不会被删除的。
二:API中对于remove()方法的介绍如下:
从该集合中删除指定元素的单个实例(如果存在)(可选操作)。 更正式地,删除元素e
,使得**(o==null ? e==null : o.equals(e))**
。
注意,不同类的equals方法是不同的,基类Object中定义的equals方法是比较两个对象的地址值是否相等,根据不同类的不同功能,我们可以选择重写equals方法。在使用集合的remove()方法时,需要注意集合所包含对象的equals方法的含义。
代码示例:
/* * Collection接口的使用说明 * (1) 添加元素 * (2) 删除元素 * (3) 遍历元素 * (4) 判断 */ public class Demo1 { public static void main(String[] args) { Collection<Integer> collection = new ArrayList<Integer>(); // 添加元素 collection.add(1); collection.add(1); collection.add(2); collection.add(3); // System.out.println会自动调用对象的toString()方法,前提是方法存在 System.out.println(collection); // 移除元素 collection.remove(1); System.out.println(collection); // 包含元素 System.out.println(collection.contains(1)); // 遍历元素 // 1. foreach方法 for(Integer num : collection){ System.out.println(num); } System.out.println("==================="); // 2.迭代器 Iterator<Integer> iterator = collection.iterator(); while(iterator.hasNext()){ // next()方法会返回当前元素,并将迭代器指向移动到下一个位置 Integer num = iterator.next(); // remove()方法跟在next()方法后面使用,删除集合中next返回的元素 iterator.remove(); System.out.println(num); } System.out.println(collection.isEmpty()); } }
List子接口
一:特定:有序,有下标,元素可重复
- 方法
- void add(int index, Object o) // 在index处插入对象o
- booleadn addAll(int index, Collection c) // 将一个集合中所有对象添加到此集合中的index位置
- Object get(int index) // 返回集合中指定位置处的元素
- List subList(int fromIndex, int toIndex) // 返回fromIndex和toIndex之间的集合元素
1.ArrayList
ArrayList类是Java集合框架中使用率很高的的一个类,它实现了List接口,底层是采用数组来保存元素,我们可以把它看作是一个可以自动增大容量的数组。
在ArrayList中有一个数组和计数器,当我们向ArrayList中添加一个元素时,这个元素会放在计算器所指定的数组索引位置上。当ArrayList对象的数组无法保存更多的元素时,它会创建一个比当前数组大一些的新数组,然后把当前数组的内容复制到新数组中。
在程序编写的过程中,我们最好根据需要保存元素的多少为ArrayList估算一个容量值,这样可以有效地避免操作过程中频繁地发生数组复制。
对于数据的访问一般包括四个操作:增,删,改,查。ArrayList对于这四个操作都给出了相应的方法。
1.1 增
-
public boolean add(E e)
-
public void add(int index, E element)
-
public boolean addAll(Collection<? extends E> c)
-
public boolean addAll(int index, Collection<? extends E> c)
其中,add方法用于添加单个元素,addAll方法用于添加一组元素。不带索引的add和addAll方法将元素添加于末尾,而带index的方法将元素在指定的index处插入列表。
例如:
ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.addAll(0, Arrays.asList(1,3,1,4)); System.out.println(list);
输出结果:
[1, 3, 1, 4, 1, 2]
1.2 删
-
public E remove(int index) // 删除指定索引处的元素
-
// 从列表中删除指定元素的第一个匹配项(如果存在)。如果列表中不包含改元素,则列表保持不变 public boolean remove(Object o)
-
// Java8在Collection接口中新增的默认方法,ArrayList重写了该方法,从列表中删除满足filter的元素 public boolean removeIf(Predicate<? super E> filter)
-
// 从列表中删除指定集合中包含的所有元素,它和remove方法不一样,比如说c中有一个元素为a,那么 // removeAll方法会将列表中所有的元素a都删掉 public boolean removeAll(Collection<?> c)
实例:
ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.addAll(0, Arrays.asList(1,3,1,4)); // System.out.println(list); list.remove(0); list.removeAll(Arrays.asList(3,1)); // lambda表达式 list.removeIf(x -> x % 2 == 0); System.out.println(list);
输出为一个空列表
1.3 改
-
public E set(int index, E element)
用给定元素element代替原列表中指定索引位置的元素
1.4 查
-
public E get(int index) // 返回指定索引位置的元素
-
// 返回列表中元素o第一次出现的索引位置,如果列表中不包含该元素,则返回-1 public int indexOf(Object o)
-
// 返回列表中元素o最后一次出现的索引位置,如果列表中不包含该元素,则返回-1 public int lastIndexOf(Object o)
-
// 返回列表中fromIndex(包括)和toIndex(不包括)之间的元素 public List<E> subList(int fromIndex, int toIndex)
这篇关于Java集合框架——ArrayList的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程