boolean add(int index, Object obj) 将指定元素obj插入到集合中指定的位置
Object remove(int index) 从集合中删除指定index处的元素,返回该元素
void clear() 清空集合中所有元素
Object set(int index, Object obj) 用指定元素obj替代集合中指定位置上的元素
LinkedList
LinkedList 是以链表实现的,插入、删除时只需要改变前后两个节点指针指向即可,它是链表实现的线性表(双链表)。
它的一些特点:
双向链表实现
元素时有序的,输出顺序与输入顺序一致
允许元素为 null
要找到某个结点,必须从头开始遍历。(查询慢,增删快)
和 ArrayList 一样,不是同步容器
常用方法:
boolean add(Object obj) 将指定元素obj追加到集合的末尾
Object get(int index) 返回集合中指定位置上的元素
int size() 返回集合中的元素个数
boolean add(int index, Object obj) 将指定元素obj插入到集合中指定的位置
Object remove(int index) 从集合中删除指定index处的元素,返回该元素
void clear() 清空集合中所有元素
Object set(int index, Object obj) 用指定元素obj替代集合中指定位置上的元素
//LinkedList特有
void addFirst(E e) 将元素添加到集合的起始位置;
void addLast(E e) 将元素添加到集合的末尾位置;
Object getFirst() 获取集合的第一个元素;
Object getLast() 获取集合的最后一个元素;
Object removeFirst() 删除集合的第一个元素,并返回该元素;
Object removeLast() 删除集合的最后一个元素,并返回该元素;
HashSet
HashSet是set接口的实现类,也是我们最常用的set集合
储存的是无序,唯一的对象(不能够存储重复的元素)
由于是无序的所以每组数据都没有索引,很多list可用的方法他都没有
凡是需要通过索引来进行操作的方法都没有
所以也不能使用普通for循环来进行遍历,只有foreach和迭代器两种遍历方法
允许包含值为null的元素,但最多只能有一个null元素。
常用方法:
boolean add(Object obj) 将指定的元素添加到此集合
boolean contains(Object obj) 如果此集合包含指定的元素,则返回true
boolean isEmpty() 如果此集合不包含元素,则返回true
int size() 返回集合中的元素个数
boolean remove(Object obj) 如果存在,则从该集合中删除指定的元素
void clear() 从此集合中删除所有元素
HashMap
HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。
底层实现是 链表数组,JDK 8 后又加了 红黑树
实现了 Map 全部的方法
key 用 Set 存放,所以想做到 key 不允许重复,key 对应的类需要重写 hashCode 和 equals 方法
允许空键和空值(但空键只有一个,且放在第一位)
元素是无序的,而且顺序会不定时改变
插入、获取的时间复杂度基本是 O(1)(前提是有适当的哈希函数,让元素分布在均匀的位置)
遍历整个 Map 需要的时间与 桶(数组) 的长度成正比(因此初始化时 HashMap 的容量不宜太大)
两个关键因子:初始容量、加载因子
常用方法:
void clear(); 删除所有的映射
boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回true
boolean containsValue(Object value) 如果将一个或多个键映射到指定值,则返回true
V get(Object key) 返回到指定键所映射的值,或 null如果此映射包含该键的映射
boolean isEmpty() 如果此地图不包含键值映射,则返回 true
V put(K key, V value) 将指定的值与此映射中的指定键相关联
V remove(Object key) 从该地图中删除指定键的映射(如果存在)
V replace(K key, V value) 只有当目标映射到某个值时,才能替换指定键的条目
int size() 返回此地图中键值映射的数量
ArrayList与LinkedList区别
ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针。
对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
HashSet与HashMap的区别
HashMap HashSet
HashMap实现了Map接口 HashSet实现了Set接口
HashMap储存键值对 HashSet仅仅存储对象
使用put()方法将元素放入map中 使用add()方法将元素放入set中
HashMap中使用键对象来计算hashcode值 HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false
HashMap比较快,因为是使用唯一的键来获取对象 HashSet较HashMap来说比较慢
如何选择在什么场景下使用它们
ArrayList:如果需要大量的随机访问就要使用ArrayList
LinkedList:如果要经常从中间插入和删除就要使用LinkedList
HashSet:元素无放入顺序,元素不可重复,重复元素会覆盖掉
HashMap:如果要通过键值队来访问就是用HashMap,键唯一,值不唯一,key和value都可以为null
---------------------
作者:孤独键客
原文:https://blog.csdn.net/lkp1603645756/article/details/85014364