请选择 进入手机版 | 继续访问电脑版

java 集合概念整理 List、set、map

[复制链接]
小小海 发表于 2020-12-31 18:12:58 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
本文是自己对java聚集概念的整理、方便自己影象学习。主要参考了以下内容
API:https://docs.oracle.com/javase/8/docs/api/
教程:https://www.runoob.com/java/java-collections.html
博客:https://blog.csdn.net/feiyanaffection/article/details/81394745
1、Collection、Collections区别
java.util.Collection 是一个 聚集框架的父接口。它提供了对聚集对象举行基本利用的通用接口方法。Collection接口在Java 类库中有许多详细的实现:list、set
java.util.Collections 是一个包装类。它包罗有各种有关聚集利用的 静态多态方法。此类 不能实例化,就像一 个工具类,服务于Java的Collection框架。他提供一系列静态方法实现对各种聚集的搜索、排序、线程安全化等利用。比如Collections.sort(list);
2、线程安全、线程不安全、同步、差别步
线程安全就是说多线程访问同一代码,不会产生不确定的效果。编写线程安全的代码是低依靠线程同步。
线程安全一般都涉及到synchronized 就是一段代码同时只能有一个线程来利用 否则中间过程大概会产生不可预制的效果
线程不安全是指不提供加锁机制掩护,有大概出现多个线程先后更改数据造成所得到的数据是脏数据。
3、链表、哈希表
链表是一种物理存储单元上非一连、非顺序的存储布局,数据元素的逻辑顺序是通过链表中的指针链接序次实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
每个结点包罗两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序布局,利用复杂。线性表的链式存储表现,有一个缺点就是要找一个数,必须要重新开始找起,利用麻烦。
哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接举行访问的数据布局。它通过把关键码值映射到哈希表中的一个位置来访问纪录,以加速查找的速度。这个映射函数就做散列函数,存放纪录的数组叫做散列表
4、java聚集架构(参考https://www.runoob.com/java/java-collections.html)

聚集架构条理图:

聚集分类示意图(参考https://blog.csdn.net/feiyanaffection/article/details/81394745)

5、聚集、数组的区别
  ①长度:聚集的长度可变;数组的长度固定
  ②数据范例:数组可以是基本范例、也可以是引用范例;聚集只能是引用范例
  ③存储元素范例:数组只能存储同一种范例;聚集可以存储差别范例。
6、List、set区别
共同点:List,Set都是继续自Collection接口,都可以存储null数据。
①重复对象:list可以允许重复的对象,而set不允许重复对象
②容器是否有序:list是一个有序的容器,保持了每个元素的插入顺序。即输出顺序就是输入顺序,而set方法是无序容器,无法包管每个元素的存储顺序
*list有序并不代表排序。
③性能:Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
               List:和数组雷同,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变
7、ArrayList、LinkedList 、Vector的区别
   共同点:都实现list接口
   区别:(1)ArrayList:底层数据布局是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素
              (2)LinkedList 底层数据布局是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素
              (3)Vector:      底层数据布局是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素
8、HashSet、LinkedHashSet、TreeSet的区别 
   相同点:不容许包罗相同的元素、判定两个对象是否相同不是使用==运算符,而是根据equals方法。
                  都是非线程安全
   区别:LinkedHashSet,插入、删除比HashSet要略微慢一点,遍历LinkedHashSet会更快。
             TreeSet是SortedSet接口的唯一实现。
             TreeSet可以确保聚集元素处于排序状态
             TreeSet支持两种排序方法:自然排序和定制排序。默认情况下,TreeSet采用自然排序(升序)。
对于set、list的使用、可以参考下图(图片泉源https://blog.csdn.net/feiyanaffection/article/details/81394745)

9、map
Map没有继续Collection接口,Map提供key到value的映射、一个Map中不能包罗相同的key,每个key只能映射一个value
HashMap、HashTable、TreeMap的区别
   ①Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。
       HashMap最多只允许一条纪录的键为Null;允许多条纪录的值为 Null;
       HashMap不支持线程的同步
   ②Hashtable与 HashMap雷同,它继续自Dictionary类,它不允许纪录的键大概值为空; 它支持线程的同步
   ③LinkedHashMap是有序的,生存了纪录的插入顺序:就是说你插入的是什么顺序,读出来的就是什么顺序,但是也有访问顺序,就是说你访问了一个key,这个key就跑到了最后面
   ④TreeMap实现SortMap接口,可以或许把它生存的纪录根据键排序,默认是按键值的升序排序,也可以指定排序的比力器
 

来源:https://blog.csdn.net/qingdatiankong/article/details/111990965
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )