蓝桥杯常用的APi
创建ArrayList和LinkedList
在 Java 中,ArrayList
和 LinkedList
是两种常用的集合类,它们都实现了 List
接口。它们的创建方式和底层实现有所不同,适用的场景也各有特点。以下是它们的详细介绍和区别。
ArrayList
和 LinkedList
的区别
1.底层实现
-
ArrayList
:基于动态数组实现,底层是一个数组。 -
LinkedList
:基于双向链表实现,底层是一个链表结构。
2.性能差异
-
随机访问:
-
ArrayList
:通过索引访问元素非常快,时间复杂度为 O(1)。 -
LinkedList
:通过索引访问元素较慢,因为需要从头或尾遍历到指定位置,时间复杂度为 O(n)。
-
-
插入和删除:
-
ArrayList
:在中间位置插入或删除元素较慢,因为需要移动大量元素,时间复杂度为 O(n)。 -
LinkedList
:在中间位置插入或删除元素较快,因为只需要调整指针,时间复杂度为 O(1)(前提是已经找到目标位置)。
-
-
内存占用:
-
ArrayList
:内存占用相对较小,因为每个元素只存储数据本身。 -
LinkedList
:内存占用较大,因为每个节点需要存储数据和前后指针。
-
3.适用场景
-
ArrayList
:-
适合需要频繁随机访问的场景。
-
适合数据量较大且插入和删除操作较少的场景。
-
适合需要动态数组功能的场景。
-
-
LinkedList
:-
适合需要频繁插入和删除的场景。
-
适合需要实现队列或栈的场景(
LinkedList
提供了额外的方法,如addFirst()
、removeLast()
等)。
-
4.线程安全性
-
ArrayList
和LinkedList
都不是线程安全的。如果需要线程安全的列表,可以使用Collections.synchronizedList()
或CopyOnWriteArrayList
。
5. 总结
特性 | ArrayList | LinkedList |
---|---|---|
底层实现 | 动态数组 | 双向链表 |
随机访问性能 | O(1)(快) | O(n)(慢) |
插入/删除性能 | O(n)(慢) | O(1)(快,前提是找到目标位置) |
内存占用 | 较小 | 较大 |
适用场景 | 随机访问频繁、插入删除较少 | 插入删除频繁、实现队列或栈 |
Set接口
Set集合不允许存储重复的元素,常用的实现类有HashSet和TreeSet。
Map接口
Map
是 Java 中的一个接口,用于存储键值对(Key-Value)的数据结构。它的每个元素由一个键(Key)和一个值(Value)组成,键是唯一的,而值可以重复。Map
提供了根据键快速查找值的能力,非常适合需要关联数据的场景。
1. Map 的基本概念
-
键(Key):用于唯一标识一个条目。一个键在
Map
中只能出现一次。 -
值(Value):与键关联的数据。
-
键值对(Entry):键和值的组合。
2. Map 的常用实现类
-
HashMap
:基于哈希表实现,提供快速的插入、删除和查找操作。键和值都可以为null
(但一个键只能有一个null
)。 -
LinkedHashMap
:基于哈希表和双向链表实现,保持插入顺序。 -
TreeMap
:基于红黑树实现,按键的自然顺序或自定义顺序排序。 -
Hashtable
:与HashMap
类似,但线程安全,不支持null
键或值(已过时,推荐使用ConcurrentHashMap
)。 -
ConcurrentHashMap
:线程安全的哈希表实现,适合高并发场景。
3. Map 的主要方法
以下是一些常用的 Map
接口方法:
-
put(K key, V value)
:将键值对插入到Map
中。 -
get(Object key)
:通过键获取对应的值。 -
remove(Object key)
:通过键删除对应的键值对。 -
containsKey(Object key)
:检查Map
是否包含指定的键。 -
containsValue(Object value)
:检查Map
是否包含指定的值。 -
keySet()
:返回包含所有键的Set
。 -
values()
:返回包含所有值的Collection
。 -
entrySet()
:返回包含所有键值对的Set
。 -
size()
:返回Map
中的键值对数量。 -
clear()
:清空Map
。
4.Map 的适用场景
-
-
关联数据:例如存储用户 ID 和用户信息。
-
缓存:通过键快速查找值。
-
统计频率:例如统计单词出现的次数。
-
常用类
1.String类
String类提供了许多用于字符串操作的方法。
2.Math类
Math类提供了许多数学运算的方法。
3.BigInteger类
BigInteger类用于处理任意精度的整数运算。
4.LocalDate类
LocalDate类用于处理日期。