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.集合,数组都是对多个数据进行存储操作的结构,简称java容器
说明:此时的存储,只要指的是内存层面的存储,不涉及到持久化的存储(.txtjpg,.avi,数据)
2.数组在存储多个数据方面的特点
一旦初始化以后,其长度就确定了
数组一旦定义好,其元素的类型也就确定了。我们也就只能操作指定类型的数据了
比如:String[]arr,int[]arr1,Object[]arrw
3.数组在存储多个数组方面的缺点
一旦初始化以后,其长度就不可修改
数组中提供的方法非常有限,对于添加,删除,插入数据等操作,非常不便,同时效率不高
获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用
数组存储数据的特点:有序,可重复。对于无序,不可重复的需求,不能满足
4.集合框架体系
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ArrayList的源码分析
在这里插入图片描述
结论:建议开发中使用带参的构造器:ArrayList list=new ArrayList(int capacity)
Jdk8中ArrayList的变化在这里插入图片描述
LinkedList的源码分析
在这里插入图片描述

Veator的源码分析:jdk7和jdk8通过Vector()构造器创建对象时,底层都创建了长度为10的数组
在扩容方面,默认扩容为原来的数组长度的2倍
ArrayList,LinkedList,Vector三者的异同?
同:三各类都是实现了List接口,存储数据的特点相同:存储有序的,可重复的数据
不同:底层源码实现方式不同
ArrayList和LinkedList的异同
二者的线程都不安全,相对线程安全的Vector,执行效率高。此外,ArrayList时实现了基于动态数组的数据结构,LinkedList基于链表的数据结构,对于随机访问get和set,ArrayList觉得优于LinkedList比较占优势,因为LinledList要移动指针。对于新增和删除操作add(特指插入)和remove,LinkedList比较占优势,因为ArrayList要移动数据。
ArrayList和Vector的区别
Vector和ArrayList几乎是完全相同的,唯一的区别在于Vector是同步类(synchronized),属于强同步类,因为开销就比ArrayList要大,访问要慢。正常情况下,大多数的java程序员使用ArrayList而不是Vector,因为同步完全可以由程序员自己来控制。Vector每次扩容请求其大小的2倍空间,而ArrayList是1.5倍。
List中的方法
Viod add(int index,Object ele):在undex位置插入ele元素
Boolean addAll(int index, Collection eles):从index位置开始将eles中的所有被元素添加进来
IntindexOf(Object obj):返回obj在集合中首次出现的位置
intLastIndexOf(Object obj):返回obj在集合中末次出现的位置
Object remlove(int index):移除指定index位置元素,并返回此元素
Object set(int index,Object ele):设置指定index位置的元素ele
=List subList(int fromindex,int tonIndex):返回从fromIndex到toIndex()位置的子集合=
总结常用方法:
增:add(Object obj)
删:remove(int index)/remove(Object obj)
改:set(int index,Object ele)
查:get(int index)
插:add(int index,Object ele)
长度:size()
遍历:①Iterator迭代器方式②增强for循环③普通for循环
二、 Set接口框架
体系
在这里插入图片描述

Set:存储无序的,不可重复的数据
以HashSet为例说明
无序性:不等于随机性。存储的数据在底层数字中并非按照数组索引的顺序添加,而是根据数据的哈希值决定的
不可重复性:保证添加的元素按照equals()判断时,不能返回ture。即:相同的元素只能添加一个
添加元素过程:以HashSet为例
我们向HashSet中添加元素a,首先调用元素a所在类的hashCode()方法,计算元素a的哈希值,此哈希值接着通过某种算法计算出HashSet底层数组中的存放位置(即为:索引位置),判断数组此位置上是否已经有元素:
如果此位置上没有其他元素,则元素a添加成功–>情1
如果此位置上有其他元素b(或者链表的形式存在的多个元素),则比较元素a与元素b的hash值:
如果hash值不相同,则元素a添加成功—>情况2
如果hash值相同,则需要调用元素所在类的equals()方法
equals()返回true,元素a添加失败
equals()返回false,则元素a添加成功
LinkedHashSet的使用
LinkedHashSet作为HashSet的子类,在添加数据的同时,每个数据还维护了两个引用,记录此数据前一个数据和后一个数据
优点:对于频繁的遍历操作,LinkedHashSet效率高于HashSet
TreeSet的使用
向TreeSet中添加的数据,要求时相同的对象
两种排序方式:自然排序(实现Comparable接口)和制定排序(Comparator)
自然排序中,比较两个对象是否相同的标准为compareTo()返回0,不再是equals()
定制排序中,比较两个对象是否相同的标准为compaew()返回0,不再是equals()
三、Map接口

  1. 在这里插入图片描述

2.Map结构的理解
=Map中的kye:无序的,不可重复的,使用Set存储所有的key—>key所在的类要重写equals()和hashCode(以HashMap为例)=
=Map中的value:无序的,可重复的,使用Collection存储所有的value—>value所在类要重写equals()=
一个键值对:key-value构成了一个Entery对象
Map中的entry:无序的,不可重复的,使用Set存储所有的entry
3.HashMap的底层实现原理
在这里插入图片描述
4.LinkedHashMap的底层原理(了解)
在这里插入图片描述
5.Map的常用方法
添加,删除,修改操作
Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中
void putAll(Map m):将m中的所有key-value对存放到当前map中
Object remove(Object key):移除指定key-value对,并且返回value
void clear():清空当前map中的所有数据
查询操作
Object get(Object key):获取指定key对应的value
boolean containsKey(Object key):是否包含指定的key
boolean containsKey(Object value):是否包含指定的value
int size():返回map中key-value对的个数
boolean isEmpty():判断当前map和参数对象obj是否相等、
元视图操作方法
Set keyset():返回所有key构成的Set集合
在这里插入图片描述
Collection values():返回所有value构成的Collection集合
Set entrySet():返回所有key-vlue对构成的Set集合
在这里插入图片描述
总结常用方法
添加:put(Object key,Object value)
删除:remove(Object key)
修改:put(Object key,Object value)
查询:get(Object key)
长度:size()
遍历:keyset()/values()/entrySet()
6.TreeMap中添加key-value,要求key必须是由同一个类创建的对象
因为要按照key进行排序:自然排序,定制排序
7.Properties:常用来处理配置文件:key和value都是String类型
在这里插入图片描述
四、Collections集合工具类
常用方法
reverse(List):反转List中元素的顺序
shuffle(List):对List集合元素进行随机排序
sort(List):根据元素的自然顺序对指定List集合元素按升序排序
sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
swap(List,int,int):将指定List集合中i处元素和j处元素进行交换
Object max(Collection):根据元素的自然排序,返回给定集合中最大元素
Object max(Collection,Comparator):根据Comparator指定顺序,返回给定集合中最大元素
Object min(Collectton)
Object min(Collecton,Comparator)
int faequency(Collection,Object)返回指定集合中指定元素的出现次数
void copy(List dest,List src):将src中的内容复制到dest中
boolean replacecAll(List list,Object oldVal,Object newVal):使用新增值替换List对象的所有旧值
同步机制
Collection类中提供了多个synchronizedXxx()方法,该方法可使将指定集
合包装线程同步的集合,从而可以解决多线程并发访问集合时的线程安全

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:52:38  更:2022-09-21 00:57:30 
 
开发: 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年5日历 -2024/5/19 12:12:22-

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