JavaSE知识总结(集合篇) ~个人笔记以及不断思考~持续更新
目录
集合
List
List的各种接口API
List的五种遍历方式
List的删除是内部是怎么做的?
ArrayList和LinkedList的区别
Vetor和Stack是什么?
Set
Set的特点
HashSet
TreeSet
LinkedHashSet
Map
HashMap
LinkedHashMap
TreeMap
集合
在Java中,集合分为单列集合和双列集合(也叫映射集合),单列集合接口主要有:List,Set。
双列集合(映射集合)主要有:Map
List
List是Collection的子接口,是java.util提供的,里面提供了很多的实现类,比如ArrayList,LinkedList,Vetor、Stack。
List的各种接口API
添加list.add
查找list.get
删除list.remove
修改list.set
List的五种遍历方式
迭代器遍历:可用于删除元素
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {String fruit = iterator.next();System.out.println(fruit);
}
列表迭代器:用于添加元素
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {String fruit = listIterator.next();System.out.println(fruit);
}while (listIterator.hasPrevious()) {String fruit = listIterator.previous();System.out.println(fruit);
}
for循环
增强for循环
Lambda迭代器
List的删除是内部是怎么做的?
ArrayList的删除:如果删除第一个和中间的,会使其他的元素向前移动,然后调整数组大小,如果删除最后一个只需要调整大小即可
LinkedList的删除:如果删除第一个改变头节点,如果删除中间的就把上一个节点指向下一个节点就可以,如果删除最后一个只需更新尾节点的前一个节点,然后将尾节点的引用置空。
ArrayList和LinkedList的区别
ArrayList底层是动态数组,内存是连续的,创建时候其实是空参创建的,当添加第一个元素的时候,他会初始化10个容量,当满了的时候会扩大1.5倍。ArrayList查询快。因为是数组有索引内存连续 常数时间复杂度o(1) 但是删除线性时间复杂度为O(n) 因为删除过程麻烦。
ps:ArrayList的扩容是属于重新建了一个数组
ListedList的底层是一个双向链表,它有一些独特的API,查找慢,因为需要遍历整个链表,但是插入和删除快,因为插入的话直接插入节点就可以。
-
添加元素
add(E e)
:在链表末尾添加元素。add(int index, E element)
:在指定位置插入元素。addFirst(E e)
:在链表头部添加元素。addLast(E e)
:在链表尾部添加元素。
-
删除元素
remove(int index)
:删除指定位置的元素。remove(Object o)
:删除第一个匹配的元素。removeFirst()
:删除链表头部的元素。removeLast()
:删除链表尾部的元素。
-
获取元素
get(int index)
:获取指定位置的元素。getFirst()
:获取链表头部的元素。getLast()
:获取链表尾部的元素。
Vetor和Stack是什么?
Vetor是ArrayList的线程安全版本,使用Sychronized实现的,Stack是一种后进先出的数据结构。
Set
Set的特点
Set的特点就是无序、不重复,无索引。实现类有Hashset、TreeSet、LinkedHashSet。
HashSet
HashSet是用哈希表存储数据的,无序、不重复、无索引,通过哈希函数去计算并映射到哈希表的位置上面 (可能出现哈希碰撞)。增删改都是O(1)
TreeSet
基于红黑树去实现的,特点是无索引,不重复,可排序,增删改是O(logn)
LinkedHashSet
双向链表+哈希表,有序不重复无索引,增删改查都是o(1)因为增删改是用双向链表而查找是用哈希表。
Map
Map的实现类有HashMap、TreeMap、LinkedHashMap。