集合
- 一、体系结构图
- 二、Collection
- 2.1 Collection 接口和常用方法
- 2.2 集合遍历
- 2.2.1 迭代器
- 2.2.2 增强for循环
- 三、List接口及其常用方法
- 3.1 三种遍历方式
- 3.2 ArrayList
- 3.3 LinkedList
- 四 MAP
- 4.1 hashmap
一、体系结构图
集合主要是两组 单列和双列集合
Collection接口有两个重要的子接口 List和Set
Map实现 接口的实现子类是双列集合,存放的是K-V
二、Collection
2.1 Collection 接口和常用方法
Collection 常用方法,因为它是一个接口,不能直接实例化所以这里使用ArrayList来演式。
package com.cky.leedecode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public class test {
public static void main(String[] args) {
Collection collection = new ArrayList<>();
collection.add("a");
collection.add("b");
collection.add("c");
System.out.println(collection);
System.out.println(collection.remove("a"));
System.out.println(collection);
System.out.println(collection.contains("b"));
System.out.println(collection.size());
boolean empty = collection.isEmpty();
System.out.println(empty);
collection.clear();
System.out.println(collection);
ArrayList arrayList = new ArrayList();
arrayList.add("d");
arrayList.add("f");
System.out.println(collection.addAll(arrayList));
System.out.println(collection.containsAll(arrayList));
System.out.println(collection);
System.out.println(collection.removeAll(arrayList));
System.out.println(collection);
}
}
2.2 集合遍历
2.2.1 迭代器
任何一个实现Collection接口的对象,都可以通过iterator()方法获得一个迭代器对象,通过该迭代器对象可以遍历集合内容。
有两个常用方法,hasNext()和next()
在调用next()方法前,都要先执行hasNext()来判断是否有下一个对象,如果不判断,可能会出现空指针异常。
next()作用:①指针下移 ②返回当前指针的元素。
//iterator
Collection collection = new ArrayList<>();
collection.add("d");
collection.add("f");
Iterator iterator = arrayList.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
这段代码的快捷键 itit。所有快捷键的快捷键 ctrl+j
while(iterator.hasNext()){
System.out.println(iterator.next());
}
2.2.2 增强for循环
进行调试 会发现其实底层还是new了一个迭代器,增强for循环其实就是一个简化的迭代器
//增强for循环 底层仍然是迭代器 也可以用于数组
for (Object o : collection) {
System.out.println(o);
}
三、List接口及其常用方法
实现List接口的子类,有序(添加和取出顺序一样)并且可以重复
支持索引,索引从0开始
这里好像理解了老师前面说的,为什么不用数组,用集合,比如数组的话,它的容量是固定的,我们增加或删除都会比较麻烦,但是随机访问比较方便。
还有就是集合底层帮助我们实现了对应的增删改查方法,让我们不用去想着怎么删除之后移动数组这些。
3.1 三种遍历方式
LinkedList 的 get(int index) 方法在内部是通过遍历链表来找到对应位置的元素的,所以在使用 for 循环遍历 LinkedList 时,每次 get(index) 都会从链表的开头或结尾开始查找元素,时间复杂度为 O(n)。因此,虽然 LinkedList 支持用 for 循环遍历,但效率相对较低,特别是在链表元素较多时。 这也就是为什么通常建议在遍历 LinkedList 时使用迭代器 (Iterator) 或增强型 for 循环,因为它们不会重复从头开始查找,而是直接顺序遍历链表的元素,从而提高效率
3.2 ArrayList
源码分析
ArrayList源码分析
3.3 LinkedList
LinkedList源码分析
四 MAP
4.1 hashmap
源码