list、set

本文深入探讨了Java中集合类的特性与应用,包括ArrayList、LinkedList、Vector的区别及选择建议,以及Map接口的实现类如HashMap、TreeMap的特点。同时,解析了HashSet和TreeSet的底层实现原理。

ArrayList底层采用的数组实现存储,查询效率高,增加效率底,线程不安全。

LinkdList底层采用双向链表实现的存储。查询效率低,增删效率高,线程不安全。
在这里插入图片描述
为什么说它增删效率高呢,它就像小朋友手拉手,删除数据就把中间打断,让另外两个小朋友手拉手,增加也一样,不像数组,删除一个结点,就要重新拷贝。

Aector向量底层用数组实现的List,相关的方法都加了同步检查,因此”线程安全,效率低",比如,indexOf方法就增加了synchronized同步标记。
在这里插入图片描述

建议
如何选用ArrayList、LinkedList、Vector?
1、需要线程安全时,用Vector。(线程安全就代表效率底)
2、不存在线程安全问题时,并且查找较多多用ArrayLst(一般使用它)。
3、不存在线程安全问题时,增加或删除元素较多用LinkedList。

Map就是用来在存储"键(key)值(value)对"的,Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。
map接口的实现类有HashMap、TreeMap、HashTable、Properties等

HashMap底层实现采用了哈希表,基本结构“数组+链表”
(1)数组:占用空间连续。寻址容易、查询速度快,但是,增加和删除效率非常低。
(2)链表:占用空间不连续。寻址困难,查询速度慢。但是,增加删除效率非常高。
哈希表的本质就是"数组+链表";

一个entry对象存储了
1、key:键对象 value:值对象
2、next:下一个节点
3、hash:键对象的hash值
显然每一个entry对象就是一个单向链表结构。

在这里插入图片描述
然后,画出entry【】数组的结构(hashmap的结构):
在这里插入图片描述
一个数组里面存储很多个链表(初始大小16),然后一个链表里可以存储多个数据,这个数据里面包含着hash值、键、值和下一个节点。

TreeMap是红黑二叉的典型实现。
TreeMap和HashMap实现了同样的接口Map,因此,用法对于调用者来说没有区别。hashMap效率高于TreeMap;在需要排序的Map时才选用TreeMap

set接口
set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。
set容器特点:无序、不可重复。无序指set中的元素没有索引,我们只能遍历查找;不可重复指不允许加入重复的元素。更确切的讲,新元素如果和set中某个元素通过equals()方法对比为true,则不能加入;甚至,set中也只能放入null元素,不能多个。
set常用的实现类有:Hashset TreeSet等,我们一般使用hashset。

hashset是采用哈希算法实现,底层实际是用Hashmap实现的(hashset本质就是一个简化版的hashmap)因此,查询效率和增删效率都比较高。

hashset底层也是hashmap,只是把值都存在key里面,因为hashmap里面的key不能重复,所以这就是hashset不能重复的原因

TreeSet的底层实际是TreeMap实现的,内部维持了一个简化版的treemap,通过key来存储
set元素。treeset内部需要对存储的元素进行排序,因此,我们对应的类需要实现comparable接口。这样才能根据compareTo()方法比较对象之间的大小,才能进行内部排序。

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值