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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> List、Set、Map 接口及脚下集合之间的区别 -> 正文阅读

[数据结构与算法]List、Set、Map 接口及脚下集合之间的区别

首先,我们得知道集合,被人开发出来,是为什么?又或者说用来干什么?

我们要知道一点,如果需要装载一些数据,数组是不是就已经可以满足我们的要求了。但我们,需要考虑一点,数组的性质:可以存放多个数据,数组大小必须一开始就定义,并且无法改变,这就是数组相对来说的一个缺陷。

然后,集合就随之而来了,大小又或者说长度可以不定义,也就是说可以改变,从这点上,集合比数组已经有那么一点点优势了。

接下来,我们从下面这张结构图来解析一下三种集合之间依赖关系。

List、Set接口是通过继承Collection顶级接口(也可以说是容器)再由底下的集合实现类来实现的,而Map接口则是单独衍生出来的个体。

然后,通过各个集合的特点来解析一下。

List接口:数据保存有下标(有序)、数据可重复(数据不唯一)、底下分为两种数据类型:动态数组和链表

Set接口:数据不可重复(数据唯一)、底下为两种数据类型:哈希表和二叉树

Map接口:保存数据为键值对,一个键对应一个值(键不可重复),一个值可以对应多个键(值可以重复)、底下为两种数据类型:哈希表和链表

?小总结:从这里可以看出,三种接口,每个用法不一样,作用也不一样。

List:

ArrayList,LinkedList的区别?

????????????????从数据结构上来看:ArrayList动态数组,LinkedList链表

????????????????而这两个各自擅长的领域:ArrayList:查询快???????LinkedList:增删改效率快

?ArrayList和Vector有什么区别?

???????????????ArrayList线程不安全,速度快

???????????????Vector线程安全,速度慢

?ArrayList和LinkedList的底层数据结构是什么?

???????????????ArrayList 动态数组

???????????????LinkedList 链表

ArrayList默认大小是多少,是如何扩容的?

???????????????默认大小:10

???????????????扩容因子:1.5

?ArrayList和LinkedList的区别?分别用在什么场景?

???????????????ArrayList 查询效率高

???????????????LinkedList(双向链表) 增删改效率高

?LinkedList的一些基本方法:? ? ??

????????????????addFirst(); 添加在第一个

????????????????addLast(); 添加在最后一个

????????????????getFirst(); 得到第一个

????????????????getLast(); 得到最后一个

????????????????removeFirst(); 移除第一个

????????????????removeLast(); 移除最后一个

Set:

??????????????HashSet : 基于哈希表??无序(存入的顺序和取出的顺序不一致)

??????????????TreeSet : 基于二叉树??有序(存入的内部数据会根据规则排序)

HashSet 如何判断一个元素是否重复了?

??????????????先判断hash值在当前的集合中是否存在了
? ? ? ?? ? ? ?如果没有,直接添加
? ? ? ?? ? ? ?如果有,在调用equals判断值是否相等

HashSet 底层数据结构 :?

? ? ? ? ? ? ??HashMap(哈希表)

TreeSet两种排序:

????????????? 自然排序 : 里面的对象具备排序的方法 Comparable

??????????????选择器排序 自定义规则排序 Comparator

??????????????选择器优先级>自然排序

Map:

Map的特点?
?? ?? ? 里面装的都是键值对
?? ??? ?你是如何理解键值对的? ?
?? ??? ?? ????????? 一个键只对应一个值 但是一个值可以对应多个值
? ? ? ? 在HashMap放入元素的时候,怎么判断键重复?
?? ??? ?? ????????? 如果键相同 后面添加的值会替代前者的值
? ? ? ? 遍历HashMap的方式?
? ? ? ? ?? ?????????三种方式 1:遍历key的值 Set集合装 ?2:遍历value的值 Collection集合装 ?3:遍历键值对entrySet()
? ? ????????????HashTable 与 HashMap 相同 只是线程的安全性不一样 前者安全性更高 后者相对较低

Map<String, String> ms=new HashMap<String, String>();
		//添加数据 .put() 里面如果不存在这个键就会添加
		ms.put("aa", "?");
		ms.put("bb", "??");
		ms.put("cc", "???");
		ms.put("dd", "????");
		ms.put("aa", "你找死");//如果键相同 后面添加的值会替代前者的值

		根据键的值删除对应的键值对数据 .remove()
		ms.remove("嫩跌");
		
		根据键获取元素 .get() 键值对原理
		System.out.println(ms.get("嫩劫"));

		拿到所有的键 .keySet() 键为set集合
		Set<String> ks = ms.keySet();
		for (String s : ks) {
			System.out.println("键:"+s+"  值:"+ms.get(s));
		}

		//拿到所有的值 .value() 值为Collection集合
		Collection<String> vl = ms.values();
		for (String s : vl) {
			System.out.println("键:"+ms.get()+"  值:"+s);
		}

		//直接遍历键值对 .entrySet()
		Set<Entry<String, String>> esq = ms.entrySet();
		for (Entry<String, String> e : esq) {//e就是一个键值对
			System.out.print(e.getKey()+"--"+e.getValue()+",");
		}

?最后分享一段小代码,用(HashMap)求字符串中字符出现的次数

String ss="dadniuaduyavyudasyucbasyuvbyuasbdyhuabsfugbasudhbasyuibuias";
		Map<String , Integer> m=new HashMap<String , Integer>();
		while(ss.length()>0) {
			int a=ss.length();//记录原来的长度
			String b=ss.charAt(0)+"";//字符下标为0
			ss=ss.replace(b, "");//去除ss里面所有的下标为0的字符
			int aa=ss.length();//去除之后的长度
			m.put(b, a-aa);//将字符和个数记录到map集合中
		}
		System.out.println(m);

PS:才疏学浅,如若大佬看到有错误,敬请指导,吾辈必虚心接受。

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

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