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

本文是自己对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接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值