IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> java-----集合 -> 正文阅读

[数据结构与算法]java-----集合


在这里插入图片描述

1.集合概况

1.1 接口

顶级接口:Collection和map接口,Collection接口存储的单个对象,map存储的使key-value键值对对象
Collection顶级接口下的子接口:

  • 1.list接口:存储的数据有序且重复
  • 2.set接口:存储的数据使无序的且不能重复
  • 3.Queue接口:多使用优先级处理

1.2 List接口

List接口实现类共有特征:
1.数据有序
2.数据可以重复
3.数据可以为null

1.2.1 ArrayList类

1.基本特点:

  • 数据插入有序
  • 数据是可以重复的
  • 存储的数据可以为null
  • 数据结构为数组
  • 集合可以自动扩大

2.自定义实现
3.源码剖析(JDK版本基于1.7实现):

  • 继承关系
  • 属性即默认值
  • 构造函数
  • 底层数据结构
  • 扩容机制
  • 常用方法:add()、remove()、get()
    4.应用场景
    (数据是有序/数据可以重复/数据是可以存储空)在查询较高的场景

1.2.2 LinkedList类

1.基本特点

  • 底层是通过链表实现

2.源码剖析:

  • 结构:采用的是双向链表
  • 插入节点Node,删除节点

3.应用场景
(数据是有序/数据可以重复/数据是可以存储空)在修改比较高的场景下

1.2.3 Vector类

线程安全集合类

2.Map接口

2.1 HashMap类

1.特点:

  • 底层数据结构是hash表(数组+链表)
  • 元素重复问题:(key是不能重复,value可重复)
  • 元素有序问题:插入时无序的
  • 元素是否可以为空:key和value都可以为空
  • 默认大小:16
  • 扩容大小:2倍关系扩容

2.重点

  • 元素如何插入?add()
  • 如何移除元素?remove()

3.应用场景
数据统计场景

2.2 LinkedHashMap类

1.特点:

  • 底层数据结构是哈希表
  • 继承自HashMap:具有HashMap所有的特点
  • 数据有序:插入有序,访问有序

2.重点:
如何做到数据有序?添加两个属性:维护一个双向的链表接口
3.应用场景
数据统计且数据有序(统计数据出现的次数且如果数据次数相等按照插入顺序)

2.3 HashTable类

1.特点:

  • 底层数据结构是哈希表
  • 数据重复问题:(key不能重复,value可以重复)
  • 元素是否可以为null:key和value都不能为null
  • 数据有序问题:数据无序
  • 线程安全:HashTable是线程安全的
  • 默认大小:11
  • 扩容大小:2倍+1

2.HashMap和HashTable和ConcurrentHashMap的区别?

  • HashMap线程不安全,数组+链表+红黑树
  • HashTable线程安全,锁住整个对象,数组+链表
  • ConcurrentHashMap线程安全,CAS+同步锁,数组+链表+红黑树
  • HashMap的key、value均可为null。而其他的两个类不支持
    3.应用场景:数据统计问题(考虑线程安全问题时只能用该集合)

2.4 WeakHashMap类

1.特点:

  • 数据随着时间推移会消失或减少

2.java中四种引用

  • 强引用(strong):强引用所作用对象在内存不足抛出OOM的问题时都不会回收作用的对象
  • 软引用(soft):当内存不足时,在发生GC操作时,软引用所作用的对象会被回收
  • 弱引用(weak):只要发生GC操作,无论内存是否充足,弱引用所作用对象会被回收
  • 虚引用(phantom):和对象的生命周期无关,主要是来提醒对象被回收

3.应用场景:在内存紧张情况下,将非关键信息存放在该集合中

2.5 TreeMap类

1.特点:

  • 数据会按照属性的特征进行排序
  • 底层的数据结构:使用红黑树

2.应用场景
数据排序

3.set接口

3.1 HashSet类

1.特点:

  • HashSet实现基于HashMap:具有HashMap 所有特点
  • 数据不能重复
  • 可以存储null值
  • 数据是无序的

2.重点:
如何通过HashMap实现HashSet?
HashMap中存储key-value键值对,set接口的实现类都是存储单种类型的元素,set的实现中使用了HashMap中的key来存储元素,Value值给定的是一个Object对象填充。
3.应用场景
数据去重场景

3.2 LinkedHashSet类

1.特点

  • LinkedHashSet是基于LinkedHashMap实现的
  • 元素是不能重复的
  • 可以存储null值
  • 数据是有序的(插入和访问有序)
    2.应用场景
    数据去重且数据有序

3.3 TreeSet类

1.特点:

  • TreeSet是基于TreeMap实现的
  • 数据元素是按照属性进行排序的
    2.应用场景
    数据去重且按照属性特征大小排序

4.Queue接口

4.1 PriorityQueue类

1.特点

  • 底层数据结构是堆结构,默认是小根堆
  • 优先级队列保证取出的数据都是队列最小/最大的
    2.重点:
    小根堆的插入元素和删除元素的移动过程
    3.应用场景
    Top k 问题

5.其他

5.1迭代器(Iterator)

5.1.1迭代器介绍

迭代器提供了一种访问集合/容器的访问方式,而不用暴露容器内部实现细节,是一种设计模式

5.1.2 迭代器的使用(3个方法)

1.next():获取当前元素
2.hasNext():判断是否有下一个元素
3.remove():删除当前元素

5.1.3 自定义迭代器

1.集合要具有迭代器功能需要在集合类上实现Iterable接口,该接口就含有iterator()方法
2.自定义类该类实现Iterable接口,该接口是包含迭代器三个方法
3.在iterator()方法中实现实例化第二部自定义类

5.1.4 扩展点

1.Iterable接口在所有集合中都可以使用,ListIterable是List接口下特有的迭代器
2.Map接口中的迭代器使用:以键值对(entrySet方法)、以键形式(keys方法)、以值形式(Value)遍历
3.在通过迭代器遍历时删除抛出ConcurrentModificationException异常问题

5.2比较器

重点:
comparable和comparator区别?(treeMap/treeSet/priorityqueue)都使用比较器

5.3 工具类(Collections)

线程安全的方法,二分查找…

今天也要好好学习呀~

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:22:16  更:2021-08-20 15:22:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 17:05:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计