JAVA集合
List(ArrayList、LinkedList、Vector)
Map(HashMap->LinkedHashMap,TreeMap,HashTable)
Set(HashSet->LinkedHashSet,TreeSet)
List接口
特点:单列数据的集合;可以存放同一种类型的元素、元素之间有序、元素允许重复的集合,集合中每个元素都有其对应的顺序索引。
ArrayList
1.内部存储用的数据结构是用**数组(动态调整大小)**实现,默认初始容量为10。动态扩容
优点:使用数组实现,因此内部元素可以通过索引实现快速随机访问(检索集合中特定索引位置的元素)。
缺点: 1. 从ArrayList中间位置插入和删除元素,都需要循环移动其他元素元素的位置。
2. 数组空间不够需要扩容时,会开辟一个新的数组把旧的数组元素拷贝过去,比较耗性能。
3.线程不安全
LinkedList
内部存储用的数据结构是用双向链表实现
- 优点:使用链表实现,适合动态的插入和删除。
- 缺点:1.随机访问元素的速度相对较慢。
2.基于链表数据结构的实现,占用的内存空间比较大(除了保存数据本身,还要保存指针信息)。
Vector
基于 数组(动态调整大小) 数据结构实现,初始容量是10。
- 优点:线程安全
- 缺点:效率低,增加元素、删除元素、查找元素都很慢。
ArrayList内部方法
方法 | 描述 |
---|---|
add(Object obj) | 将数据元素插入到ArrayList的指定位置上 |
addAll() | 将一个新集合中的所有元素添加到ArrayList中 |
clear() | 删除ArrayList中所有的元素 |
contains() | 判断元素是否在ArrayList中 |
get() | 通过索引值获取ArrayList中的元素 |
indexOf() | 返回ArrayList中某个元素的索引值 |
removeAll(ArrayList list) | 删除ArrayList中指定集合的所有元素 |
remove(int index || Object obj) | 删除ArrayList里的单个元素 |
size() | 返回ArrayList的元素数量 |
isEmpty() | 判断ArrayList是否为空 |
subList() | 截取ArrayList的部分元素 |
set(int index, Object obj) | 替换ArrayList中指定索引的元素 |
sort()--Collections.sort(ArrayList) | 对ArrayList的数据元素进行排序 |
toArray() | 将ArrayList转换为数组 |
toString() | 将ArrayList转换为字符串 |
ensureCapacity() | 设置指定容量大小的ArrayList |
lastIndexOf() | 返回指定元素在ArrayList中最后一次出现的位置 |
retainAll() | 保留指定集合中的数据元素 |
containsAll() | 查看ArrayList是否包含了指定集合的所有元素 |
trimToSize() | 将ArrayList的容量调整为数组的元素个数 |
removeRange() | 删除ArrayList中指定索引间存在的元素 |
replaceAll() | 用给定的数据元素替换掉指定数组中每个元素 |
removeIf() | 删除所有满足特定条件的ArrayList元素 |
forEach() | 遍历ArrayList中每个元素并执行特定操作 |
Linked List内部方法
方法 | 描述 |
---|---|
public void addFirst(E e) | 将元素添加到集合的头部。 |
public void addLast(E e) | 将元素添加到集合的尾部。 |
public boolean offer(E e) | 向链表的末尾添加元素,成功为true,失败为false。 |
public boolean offerFirst(E e) | 在链表头部插入元素,成功为true,失败为false。 |
public boolean offerLast(E e) | 在链表尾部插入元素,成功为true,失败为false。 |
public void clear() | 清空链表。 |
public E removeFirst() | 删除并返回链表的第一个元素。 |
public E removeLast() | 删除并返回链表的最后一个元素。 |
public boolean remove(Object o) | 删除某一元素,成功为true,失败为false。 |
public E remove(int index) | 删除指定位置的元素。 |
public E poll() | 删除并返回第一个元素。 |
public E remove() | 删除并返回第一个元素。 |
public E getFirst() | 返回第一个元素。 |
public E getLast() | 返回最后一个元素。 |
public int lastIndexOf(Object o) | 查找指定元素最后一次出现的索引。 |
public E peek() | 返回第一个元素。 |
public E element() | 返回第一个元素。 |
public E peekFirst() | 返回头部元素。 |
public E peekLast() | 返回尾部元素。 |
public Iterator descendingIterator() | 返回倒序迭代器。 |
public ListIterator listIterator(int index) | 返回从指定位置开始到末尾的迭代器。 |
Map
特点:有键值对,键不能重复, 没有继承Collection接口;HashMap中的Entry对象是无序排列的;
Map的entrySet()方法返回一个实现Map.Entry接口的对象集合:
(1) Object getKey(): 返回条目的关键字
(2) Object getValue(): 返回条目的值
(3) Object setValue(Object value): 将相关映像中的值改为value,并且返回旧值
HashMap
此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
方法 | 描述 |
---|---|
Object put(Object key, Object value) | 将元素添加到Map。 |
Object remove(Object key) | 从映像中删除与key相关的映射。 |
void putAll(Map t) | 将来自特定映像的所有元素添加给该映像。 |
void clear() | 从映像中删除所有映射。 |
Object get(Object key) | 获得与关键字key相关的值。 |
boolean containsKey(Object key) | 判断映像中是否存在关键字key。 |
boolean containsValue(Object value) | 判断映像中是否存在值value。 |
int size() | 返回当前映像中映射的数量。 |
Set keySet() | 返回映像中所有关键字的视图集。 |
Collection values() | 返回映像中所有值的视图集。 |
Set entrySet() | 返回Map.Entry对象的视图集,即映像中的关键字/值对。(Entry en : Map.EntrySet()) |
TreeMap
- 键的自然顺序(如果键实现了
Comparable
接口)或根据指定的比较器(Comparator
)排序。键值对始终以排序后的顺序存储,并且在遍历时会按照升序返回键值对 -
TreeMap
提供了一些额外的功能,如firstKey()
、lastKey()
、headMap()
、tailMap()
等方法,便于按范围查询或按顺序访问键值对。 -
基于红黑树实现的;TreeMap就没有调优选项,因为红黑树总是处于平衡的状态
HashTable
- 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射。
- 它的key、value都不可以为null。此外,Hashtable中的映射不是有序的
- 和HashMap的继承不同,线程安全不同,遍历内部实现不同,允不允许null值不同等
Set
HashSet
特点:无序,元素不重复,可以有空值
TreeSet
特点:有序,元素不能重复,不能有空值;它可以确保元素按照升序或降序排列
LinkedHashSet
是HashSet的一个子类,需要保持元素的插入顺序,可以选择使用 LinkedHashSet(不能按照升序或降序排列)