Java集合框架提供了一套性能优良、使用方便的接口和类,位于java.util包中。
Stream是jdk8开始新增的一套API(java.util.stream.*),可以用于操作集合或者数组的数据。
0 数组:Array
0.1 初始化
int[] arr = new int[] {
25, 35, 45, 55};
int[] arr = new int[10];
int[] arr = {
1, 2, 3, 4, 5};
int[][] arr2d = {
{
1, 2}, {
3, 4}};
0.2 遍历
/* 传统for循环 */
for (int i = 0; i < arr.length; i++) {
// 长度属性length
System.out.println(arr[i]);
}
/* forEach循环 */
for (int x : arr) {
System.out.println(x);
}
1 单列集合:Collection
- List系列集合
- ArrayList、LinkedList:有序、可重复、有索引
- Set系列集合
- HashSet:无序、不重复、无索引
- LinkedHashSet:有先后顺序、不重复、无索引
- TreeSet:按大小默认升序排序、不重复、无索引
1.1 Collection接口
单列集合的顶层接口Collection<E>
。
Collection<String> colle = new ArrayList<>();
1.1.1 通用方法 ⭐️
方法名 | 说明 |
---|---|
public boolean add(E e) |
把给定的对象添加到当前集合中 |
public boolean size() |
返回集合中元素的个数 |
public void clear() |
清空集合中所有元素 |
public boolean isEmpty() |
判断当前集合是否为空 |
public boolean remove(E e) |
把给定的对象在当前集合中删除 |
public boolean contains(Object obj) |
判断当前集合中是否包含给定的对象 |
public Object[] toArray() |
把集合中的元素存储到数组中 |
1.1.2 遍历
(1) 迭代器
迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator。
方法名 | 说明 |
---|---|
Iterator<E> iterator() |
返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素 |
Iterator迭代器中的常用方法
方法名 | 说明 |
---|---|
boolean hasNext() |
判断当前位置是否有元素 |
E next() |
返回当前位置的元素,并同时将迭代器对象指向下一个元素 |
Collection本身无索引,故无法用正常的fori
遍历,但可以使用增强型for
遍历。
/* 迭代器遍历 */
Iterator<String> it = colle.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
/* 增强版for遍历(实际底层使用的也是迭代器) */
for (String s : colle) {
System.out.println(s);
}
(2) forEach()
调用forEach()
方法,并使用Lambda表达式简化书写
colle.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
// 使用Lambda表达式简化
colle.forEach(s -> {
System.out.println(s);
});
// 进一步简化
colle.forEach(System.out::println);
1.2 List系列集合 ⭐️
List系列集合添加的元素有序、可重复、有索引。因为有索引,故可用fori
遍历。
List<String> list = new ArrayList<>();
List<String> linkedList = new LinkedList<>();
方法名 | 说明 |
---|---|
void add(int index, E element) |
在此集合中的指定位置插入指定元素 |
E remove(int index) |
删除指定索引处的元素并返回它 |
E set(int index, E element) |
修改指定索引处的元素并返回它 |
E get(int index) |
返回指定索引处的元素 |
1.2.1 ArrayList ⭐️
基于数组实现,支持随机存取(顺序表),查找快、增删慢。
利用无参构造器创建的ArrayList,会在底层创建一个默认长度为0的数组。添加第一个元素时,底层会创建一个新的长度为10的数组。存满时,会扩容1.5倍。如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准。
/* 定义 */
ArrayList<Integer> list = new ArrayList<>(); // 元素必须为引用数据类型
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3)); // 初始化时赋值
List<Integer> list = Arrays.stream