Java集合框架知多少?

Java数据结构之道 专栏收录该内容
7 篇文章 0 订阅


在Java 功法中, 为了简化对各种数据结构的使用,封装成了各种各样的集合框架.

1. Java集合框架知多少?

Java集合框架大致可分为四种类型: List,Map,Set, Queue.

接下来详细说说这几个集合框架的特点.

1.1 List -----数组和链表

List 是一个接口,是对数据结构中数组和链表的封装.
该接口的实现类常用的有两种,ArrayList 和LinkedList.

1.1.1 ArrayList or LinkedList?

那么这两个实现类有什么区别呢?

请看下图对比可知:

ArrayListLinkedList
快速随机访问快快速随机访问慢
插入删除慢插入删除快
多线程并发场景下使用下不安全多线程并发场景下使用不安全
底层使用数组实现底层使用链表实现
数组方式存储单个元素的顺序表结构链表方式存储单个元素的链表结构

1.2 Map --------Key Value 哈希结构

  • Map 也是一个接口,是存储KV键值对的哈希式结构.
  • 特点是Key,Value 方式存储
  • Key 不可重复,按照哈希函数计算得到的唯一值,
  • Value是可重复的
    • 获取所有的key 用keySet()方法
    • 获取所有的Value用values();方法
    • 获取所有的Key和Value用entrySet()方法

1.2.1 HashMap or ConcurrentHashMap?

HashMapConcurrentHashMap
适用于单线程场景下使用适用于多线程并发场景下使用

注: HashTable 因为性能瓶颈已淘汰被废弃

1.3 Set

  • Set 是不允许出现重复元素的集合类型.
  • 最常用的实现类有: HashSet ,TreeSet, LinkedHashSet.

1.3.1 HashSet or TreeSet or LinkedHashSet?

1.3.2 HashSet

HashSet底层基础其实是使用HashMap 实现,怎么理解呢?
我们先来看下源码中这个方法

private static final Object PRESENT = new Object();
public HashSet() {
        map = new HashMap<>();
}
public boolean add(E e) {
        return map.put(e, PRESENT)==null;
}

我们可以看到当HashSet()被初始化的时候,创建了一个HashMap 对象, 当我们执行Set中的add(E e);
方法的时候会把Object 对象作为Key , 而Value始终是维护的一个不变的对象.

1.3.3 TreeSet

TreeSet底层基础使用TreeMap实现,而TreeMap 的底层是数据结构树的封装.
在添加新元素到集合中时,按照某种比较规则将其插入合适的位置,保证插入后得集合仍然是有序的.

1.3.4 LinkedHashset

LinkedHashset 继承自Hashset, 具有HashSet 的优点,内部使用链表维护了元素的插入顺序.

1.4 Queue

  • Queue 也是一个接口,是数据结构中队列的封装
  • 队列的特性是先进先出
  • 队列是一种特殊的线性表
  • 该接口常见的实现类有:
    • BlockingQueue

这节主要侧重于理论,下篇讲解实战中这些集合应该如何使用.

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值