文章目录
- 1.容器介绍
- 1.1 容器接口结构
- 1.2 简单解析
- 2. List容器创建(Member functions)
- 3. 访问操作(Element access)
- 3.1 get()
- 3.2 Iterator遍历
- 3.3 增强for循环
- 4. 修改操作(Modifiers)
- 4.1 add()
- 4.2 addAll()
- 4.3 remove()
- 4.4 set()
- 5. 容量操作(Member functions)
- 5.1 clear() + contains() + isEmpty() + size()
- 6. 其他操作(Other)
- 6.1 toArray()
1.容器介绍
1.1 容器接口结构
a. Java存储结构划分
Java当中按照存储结构可以划分成为两个大类,分别是单列集合 java.util.Collection 和 双列集合 java.util.Map, 顾名思义Collection是实现单列集合的根接口, 而Map则是实现双列集合(键值对)的根接口。
b. 单列接口Collection
单列接口Collection当中下面可以看到存在许多的子接口例如,List接口,Set接口等等,今天我们着重介绍的就是List接口,即List容器当中的一些通用的操作和常用的实现类举例.
c. List接口 : 有序 + 重复
List接口当下拥有许多的实现类,其中常用的实现类有ArrayList,LinkedList,Vector等等,不同的实现类其底层实现的接口也会有不同,可能是用数组实现也可能是用链表进行实现的,不同的实现类也可能会拥有一些不同的操作方法。例如对于LinkList因为其底层实现了Deque接口所以其相对List接口以外还会有一些支持双端队头队尾的操作(addFirst, addLast)等.
1.2 简单解析
A. 包路径:java.util.List
B. List核心:单列 + 重复 + 有序
C. 注意:下面使用ArrayList进行方法举例,所使用的方法全部是List接口的通用方法,不是ArrayList实现类的特有方法,是所有实现List接口实现类的所有通用方法,支持所有List接口下实现类的使用
D. 常用实现类举例:
ArrayList实现类:数组结构 + 查询快 + 增删慢
2. List容器创建(Member functions)
使用ArrayList实现类
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(); // 指定具体对象Integer的List容器
}
}
3. 访问操作(Element access)
3.1 get()
索引访问:因为是有序存储的,所以肯定是支持索引访问的,即可以通过索引进行访问指定位置元素
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < 5; i ++ ) list.add(i);
for(int i = 0; i < list.size(); i ++ ) // list.get()
System.out.println(list.get(i)); // 0 1 2 3 4
}
}
3.2 Iterator遍历
迭代器访问:因为继承了迭代器Iterable接口,支持迭代器的访问操作
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < 5; i ++ ) list.add(i);
Iterator<Integer> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next()); // 0 1 2 3 4
}
it = list.listIterator(2); // 从指定位置开始的迭代器
while(it.hasNext()) {
System.out.println(it.next()); // 2 3 4
}
}
}
3.3 增强for循环
增强for循环:支持直接使用增强的for循环直接遍历容器内所有元素
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < 5; i ++ ) list.add(i);
for(Integer it : list) // 增强for循环直接遍历所有元素
System.out.println(it); // 0 1 2 3 4
}
}
4. 修改操作(Modifiers)
4.1 add()
单个元素添加 :
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 3; i > 0; i -- ) list.add(i);
for(int i : list) System.out.print(i + " "); // 3 2 1
System.out.println();
list.add(0, 100); // 向指定位置插入元素
for(int i : list) System.out.print(i + " "); // 100 3 2 1
}
}
4.2 addAll()
多个元素添加 :
public class Main {
// 泛型使用,输出ArrayList所有Number范围内数据类型(只有在调用时才确定数据类型)
public static void print(ArrayList<? extends Number> temp) {
System.out.println(temp);
}
public static void main(String[] args) {
ArrayList<Number> list = new ArrayList<Number>();
for(int i = 0; i < 2; i ++ ) list.add(i);
print(list); // [0, 1]
ArrayList<Number> list1 = new ArrayList<Number>();
list1.add(0.1); list1.add(0.2);
list.addAll(list1); // 添加到元素结尾
print(list); //[0, 1, 0.1, 0.2]
ArrayList<Number> list2 = new ArrayList<Number>();
list2.add(0.3); list2.add(0.4);
list.addAll(0, list2); // 插入到指定位置后面
print(list); //[0.3, 0.4, 0, 1, 0.1, 0.2]
}
}
4.3 remove()
单个元素删除:remove方法默认是删除指定位置上的元素,如果想使用第二个方法,一定要记得进行强制类型转换(如果存储的元素正好也是int类型), 才会自动对应上第二个方法
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 3; i > 0; i -- ) list.add(i);
list.add(2); // 3 2 1 2
list.remove(3); // 根据索引删除
for(int it : list) System.out.print(it + " "); // 3 2 1
System.out.println();
list.remove((Integer)3); // 注意 : 删除首次出现的元素对象(若有多个也只会删除第一个对象)
for(int it : list) System.out.print(it + " "); // 2 1
}
}
4.4 set()
单个元素替换 :
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 3; i > 0; i -- ) list.add(i); // 3 2 1
list.set(0, 30); // 元素30替换0位置上的元素
for(int it : list) System.out.print(it + " "); // 30 2 1
}
}
5. 容量操作(Member functions)
5.1 clear() + contains() + isEmpty() + size()
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 3; i > 0; i -- ) list.add(i); // 3 2 1
System.out.println(list.contains(1)); // true
System.out.println(list.size()); // 3
System.out.println(list.isEmpty()); // false
list.clear();
System.out.println(list.isEmpty()); // true
}
}
6. 其他操作(Other)
6.1 toArray()
a. toArray(): 将元素按适当顺序返回成为一个数组
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 3; i > 0; i -- ) list.add(i); // 3 2 1
Object[] arr = list.toArray();
for(Object i : arr) System.out.print(i + " "); // 3 2 1
}
}