java四大集合_Java四大集合(ArrayList、LinkedList、HashSet、HashMap)用法

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

e68e30b70d5052fa2e8c2a67ced692d3.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值