Java集合框架【二容器(Collection)[ArrayList]】
1 容器/集合简介
- 程序中的“容器”,用来容纳和管理数据。
- 我们在之前所学习的数组就是一种容器,可以在其中放置对象或基本数据类型数据。数组的优势:一种简单的线性序列,可以快速访问数组元素,效率高。从效率和类型检查角度来讲,数组是最好的。劣势:不灵活。容量需要事先定义好,不能根据需求的变化而变化。
- 由于数组并不能满足我们对“管理和组织数据的需求”,所以我们需要一种更强大、更灵活、容量可以随时变化的容器来装载对象。
2 容器的结构
2.1 结构图
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/ac67237156e6485bb552f5bd5a422a8c.webp)
2.1.1 单例集合
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/2f9711e676a04de7b9cbb1dd405d5a0c.webp)
2.1.2 双例集合
- 双例集合:基于key和value的结构存储数据。
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/1800df22cebc4c58b5a64cd7dd8f86ab.webp)
3 单例集合的使用
3.1 Collection接口的介绍
- Collection是单例集合跟接口,它是集中收集的意思。 Collection接口的2个子接口是List和Set接口。
3.2 Collection接口中的接口方法
| 方法 | 说明 |
|---|---|
| boolean add(Object element) | 增加元素到容器中 |
| booleanremove(Object element) | 从容器中移除元素 |
| boolean contains(Object element) | 容器中是否包含该元素 |
| int size() | 容器中元素的数量 |
| boolean isEmpty() | 容器是否为空 |
| void clear() | 清空容器中所有元素 |
| iterator iterator() | 获得送代器,用于遍历所有元素 |
| boolean containsAll(Collection c) | 本容器是否包含C容器中的所有元素 |
| boolean addAlI(Collectiond c) | 将容器C中所有元素增加到本容器 |
| boolean removeAll(Collection c) | 移除本容器和容器c中都包含的元素 |
| boolean retainAll(Collection c) | 取本容器和容器C中都包含的元素,移除非交集元素 |
| Object[] toArray0 | 转化成Object数组 |
| removeIf 【jdk1.8之后】 | 作用是删除容器中所有满足filter指定条件的元素。 |
| stream parallelstream | stream和parallelstream分别返回该容器的Stream视图表示,不同之处在于parallelstream()返回并行的Stream。Stream是Java函数式编程的核心类。 |
| spliterator | 可分割的送代器不同以往的iterator需要顺序送代,Spliterator可以分割为若千个小的选代器进行并行操作,可以实现多线程操作提高效率 |
- 由于List、Set是Collection的子接口,意味着所有List、Set的实现类都有上面的方法。
3.3 List接口
3.3.1 List接口特点
- 有序:有序(元素存入集合的顺序和取出的顺序一致)。List中每个元素都有索引标记。可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素。
- 可重复:List允许加入重复的元素。更确切地讲,List通常允许满足e1.equals(e2)的元素重复加入容器
3.3.2List的常用方法
| 方法 | 说明 |
|---|---|
| void add(int index.Object element) | 在指定位置插入元素,以前元素全部后移一位 |
| Object set(int index,Object element) | 修改指定位置的元索 |
| Object get(intindex) | 返回指定位置的元系 |
| Object remove(intindex) | 删除指定位置的元素,后面元系全部前移一位 |
| int indexOf(Object o) | 返回第一个匹配元素的索引,如果没有该元素返回-1 |
| int lastindexOf(Object o) | 返回最后一个匹配元素的索引,如果没有该元素,返回-1 |
| ## 3.4 ArrayList容器类 |
- ArrayList是List接口的实现类,是List存储特征的具体实现
- ArrayList底层使用数组实现的存储。特点:查询效率高、增删效率低、线程不安全。
3.4.1 添加元素
/**
* @author 缘友一世
* date 2022/11/17-22:29
*/
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list.add("小倩"));
System.out.println(list.add("小灵"));
list.add(1,"小静");
System.out.println("添加完成");
System.out.println(list.toString());
}
}
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/fb7fc2d6ff55471090dc0acb132eec13.webp)
3.4.2 获取元素
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/7cc74b793b6242d1ae4c887ea2912208.webp)
/**
* @author 缘友一世
* date 2022/11/17-22:29
*/
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list.add("小倩"));
System.out.println(list.add("小灵"));
list.add(1,"小静");
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
for (int i=0;i<list.size();i++) {
System.out.print(list.get(i)+" ");
}
}
}
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/1e2f7b1453ed44129a929079f288e08f.webp)
3.4.3 根据索引删除元素/删除指定元素
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/3ffa794e918c44d9a672d9672b8bc999.webp)
/**
* @author 缘友一世
* date 2022/11/17-22:29
*/
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list.add("小倩"));
System.out.println(list.add("小灵"));
list.add(1,"小静");
list.remove(2);
list.remove("小静");
for (int i=0;i<list.size();i++) {
System.out.print(list.get(i)+" ");
}
}
}
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/6cc97b153425477db8d94c607e87cd83.webp)
3.4.4 替换元素
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/17f53d1cf164454a8139982ec99e2092.webp)
/**
* @author 缘友一世
* date 2022/11/17-22:29
*/
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list.add("小倩"));
System.out.println(list.add("小灵"));
list.add(1,"小静");
System.out.println(list.set(2,"小月"));
for (int i=0;i<list.size();i++) {
System.out.print(list.get(i)+" ");
}
}
}
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/23cefb6f79cb4f0c842677bfcadcd4f9.webp)
3.4.5 清空/判空容器
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/b679e0f124b5416f84680070c6786a7a.webp)
/**
* @author 缘友一世
* date 2022/11/17-22:29
*/
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list.add("小倩"));
System.out.println(list.add("小灵"));
list.add(1,"小静");
list.clear();
System.out.println(list.isEmpty());
}
}
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/283ceadf893d4e45b93684706e9e8f0d.webp)
3.4.6 判断容器中是否包含指定元素
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/5f7d4844246746aba60be08b6a60442a.webp)
/**
* @author 缘友一世
* date 2022/11/17-22:29
*/
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list.add("小倩"));
System.out.println(list.add("小灵"));
list.add(1,"小静");
System.out.println(list.contains("小狐"));
}
}
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/dfeacc52e5404687bcd30e5ccdab760d.webp)
3.4.7 查找第一次/最后一次元素的位置
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/85acb59c5fa3473ca4f64fba7bfb68c3.webp)
/**
* @author 缘友一世
* date 2022/11/17-22:29
*/
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list.add("小倩"));
System.out.println(list.add("小灵"));
list.add(1,"小静");
System.out.println(list.add("小灵"));
for (int i=0;i<list.size();i++) {
System.out.print(list.get(i)+" ");
}
System.out.println();
System.out.println(list.indexOf("小灵"));
System.out.println(list.lastIndexOf("小灵"));
}
}
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/dd3cf9fb18e2431e928146aeea0b8080.webp)
3.4.8 将单例集合转换为Object/泛型数组
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/d53fa33cdc02450986c16b7078e3a841.webp)
/**
* @author 缘友一世
* date 2022/11/17-22:29
*/
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list.add("小倩"));
System.out.println(list.add("小灵"));
list.add(1,"小静");
//将ArrayList转化为Object[]
//不能在转化的方法调用时进行强制类型转换。
Object[] arr = list.toArray();
for(int i=0;i<arr.length;i++) {
String str=(String) arr[i];
System.out.print(str+" ");
}
System.out.println();
//指定类型转换
String[] array = list.toArray(new String[list.size()]);
for (String s:array) {
System.out.print(s+" ");
}
}
}
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/1237b892bac1447dae2be72d785956d0.webp)
3.4.9 并集操作
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/fd053d55c1c244c7843f77aa91e8895a.webp)
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("小倩");
list.add("小灵");
ArrayList<String> list1 = new ArrayList<>();
list1.add("小静");
list1.add("小晶");
System.out.println(list.addAll(list1));
}
}
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/fae667b40dc94b9090bc62df7d2d430c.webp)
3.4.10 交集操作
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/f86849866f2a407d949d9ca18a136299.webp)
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("小倩");
list.add("小灵");
ArrayList<String> list1 = new ArrayList<>();
list1.add("小静");
list1.add("小晶");
list1.add("小倩");
System.out.println(list.retainAll(list1));
for (int i=0;i<list.size();i++) {
System.out.print(list.get(i)+" ");
}
}
}
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/1903f3f8fa964f4e941ddc0ea1eb048a.webp)
3.4.11 差集操作
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/1696b96893604883a3ddb5bdfd33ce95.webp)
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("小倩");
list.add("小灵");
ArrayList<String> list1 = new ArrayList<>();
list1.add("小静");
list1.add("小晶");
list1.add("小倩");
System.out.println(list.removeAll(list1));
for (int i=0;i<list.size();i++) {
System.out.print(list.get(i)+" ");
}
}
}
![Java集合框架【二容器(Collection)[ArrayList]】](https://static.blogweb.cn/article/5699a8a249fe431ba149cf6f6e99a21d.webp)
转载自:https://juejin.cn/post/7167231887243477023