Java集合

数组和集合的区别

数组:数组长度不可变;一个数组只能存放同类型数据;
集合:集合长度可变,并且有自动扩容机制;集合只能存放引用类型数据;一个集合可以存放不同类型的数据;

集合框架体系

在这里插入图片描述
上图是整个集合框架体系,还是有点繁杂的,我感觉常用的有:
在这里插入图片描述

Collection

常用方法:

  • boolean add(E e) 向集合中添加元素。
  • void clear() 从此集合中删除所有元素。
  • boolean contains(Object o)如果此集合包含指定的元素,则返回 true 。
  • boolean isEmpty() 如果此集合不包含元素,则返回 true 。
  • boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)。
  • default boolean removeIf(Predicate<? super E> filter) 删除满足给定谓词的此集合的所有元素。
  • int size() 返回此集合中的元素数。

遍历方式

  • 迭代器:Iterator iterator() 返回此集合中的元素的迭代器。
  • 增强for循环
  • Stream流:default Stream stream() 返回以此集合作为源的顺序 Stream 。

List

常用方法

  • void add(int index, E element) 将指定的元素插入此列表中的指定位置。
  • E get(int index) 返回此列表中指定位置的元素
  • E remove(int index) 删除该列表中指定位置的元素。
  • E set(int index, E element) 用指定的元素替换此列表中指定位置的元素。

ArrayList

底层实现
  • 使用数组实现,默认初始长度10,每次扩容到原来的1.5倍
  • 优缺点:查询快,增删慢

LinkedList

底层实现
  • 底层用双向链表实现
  • 优缺点:增删快,查询慢
常用方法
  • void addFirst(E e) 在该列表开头插入指定的元素。
  • void addLast(E e) 将指定的元素追加到此列表的末尾。
  • E getFirst() 返回此列表中的第一个元素。
  • E getLast() 返回此列表中的最后一个元素。
  • boolean offerFirst(E e) 在此列表的前面插入指定的元素。
  • boolean offerLast(E e) 在该列表的末尾插入指定的元素。
  • E removeFirst() 从此列表中删除并返回第一个元素。
  • E removeLast() 从此列表中删除并返回最后一个元素。

Voctor

线程安全的单列集合

Set

TreeSet

  • 底层是红黑树
  • 使用自定义类型时,需要实现比较器(一般使用Comparable,如果要实现不同的地方用不同的排序方式就是使用Comparator)

HashSet

    • JDK7中底层是数组加链表的形式,默认长度16,扩容因子0.75
  • JDK8中底层是数组、链表和红黑树,默认长度16,扩容因子0.75;当链表长度达到8的时候使用红黑数,查找效率更高
  • 使用自定义类型时,如需根据自己的规则排序,则需要实现HashCode和equals

List和Set的区别

List存放的元素是有序可重复的;Set存放的元素是无序不可重复的;

Queue

队列,暂时没用过

Map

常用方法

  • Set<Map.Entry<K,V>> entrySet() 返回此地图中包含的映射的Set视图。—用于遍历Map
  • Set keySet() 返回此地图中包含的键的Set视图。—用于遍历Map
  • V put(K key, V value) 将指定的值与该映射中的指定键相关联。
  • V remove(Object key) 如果存在(从可选的操作),从该地图中删除一个键的映射。
  • void clear() 从该地图中删除所有的映射。
  • boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回 true 。
  • boolean containsValue(Object value) 如果此地图将一个或多个键映射到指定的值,则返回 true 。
  • boolean isEmpty() 如果此地图不包含键值映射,则返回 true 。
  • int size() 返回此地图中键值映射的数量。

TreeMap

  • 底层使用红黑树
  • 使用自定义类型时,需要实现比较器(一般使用Comparable,如果要实现不同的地方用不同的排序方式就是使用Comparator)

HashMap

  • 底层使用数组、链表和红黑树
  • 使用自定义类型时,如需根据自己的规则排序,则需要实现HashCode和equals

HashTable

线程安全的,效率低,悲观锁

ConcurrentHashMap

线程安全的,效率较高,乐观锁

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值