Collection和Map

LIST 集合

arraylist

arraylist源代码:

1.ArrayList 底层采用数组实现,当使用不带参数的构造方法生成 ArrayList 对象时,实际上会在底层生成一个长度为 10 的Object 类型数组

2.如果增加的元素个数超过了10个,那么ArrayList底层会新生成一个数组,长度为原数组的两倍,然后将原数组的内容复制到新数组当中,并且后续增加的内容都会放到新数组当中。当新数组无法容纳增加的元素时,重复该过程。

3.remove 对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动,代价比较高,所以arraylist常用来查询。

4.集合当中只能放置对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的包装类才能加入到集合当中

5.集合当中放置的都是Object类型,因此取出来的也是Object类型,那么必须要使用强制类型转换将其转换为真正的类型(放置进去的类型)。

linkedlist

LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.

内部代码实现:定义一个entry类

  1. private static class Entry {
  2. Object element;
  3. Entry next;   //定义一个后继节点
  4. Entry previous;   //定义一个前驱节点
  5. }

arraylist 和 linkedlist 的区别

  a) ArrayList底层采用数组实现,LinkedList底层采用双向链表实现。

 b) 当执行插入或者删除操作时,将一个元素加到LinkedList的最开端只是简单的未这个元素分配一个记录,然后调整两个连接,所以采用LinkedList比较好。

 c) 当执行搜索操作时,arrayList的内部实现是基于基础的对象数组的,因此,它使用get方法访问列表中的任意一个元素时(random access),它的速度要比LinkedList快,所以采用ArrayList比较好。

MAP

Map(映射):Map的keySet()方法会返回key的集合,因为Map的键是不能重复的,因此keySet()方法的返回类型是Set;而Map的值是可以重复的,因此values()方法的返回类型是Collection,可以容纳重复的元素。

hashset

查看HashSet源代码:

HashSet底层是使用HashMap实现的,此类允许使用null元素。map的key是不允许重复的,而hashset在添加元素的时候,实际上是将要添加的元素当作key放进hashmap里面去,hashmap内部有一个哈希表用来存储数据,当map往哈希表里面放东西的时候,再用key值的hashcode去查有没有存在。是这样达到去重复的目的的,因此该实现所存储的元素不能重复

hashmap

查看HashMap源代码

1.HashMap底层维护一个数组,我们向HashMap中所放置的对象实际上是存储在该数组当中;

2. 当向HashMap中put一对键值时,它会根据key的hashCode值计算出一个位置,该位置就是此对象准备往数组中存放的位置。

3.如果该位置没有对象存在,就将此对象直接放进数组当中;如果该位置已经有对象存在了,则顺着此存在的对象的链开始寻找(Entry类有一个Entry类型的next成员变量,指向了该对象的下一个对象),如果此链上有对象的话,再去使用equals方法进行比较,如果对此链上的某个对象的equals方法比较为false,则将该对象放到数组当中,然后将数组中该位置以前存在的那个对象链接到此对象的后面。

4.使用了Entry<K,V>的键字对的形式作为了数据结构。允许使用 null 值和 null 键。

5.键(key)值是set类型的,不可重复且无序,它的键通过hash算法去重。值(value)是collection型,可以重复。

6.HashMap不是线程安全的,效率高于hashtable。

hashtable

1.HashTable是线程安全的一个Collection。

2.除了不允许空值作为key值,和是同步的之外其余方法的特点与HashMap相同。

转载于:https://www.cnblogs.com/yydeyi/p/4370448.html

LIST 和 MAP相关推荐

  1. Map的分类和不同的应用场景

    java为数据结构中的映射定义了一个接口java.util.Map; 它有四个实现类,分别是HashMap,Hashtable,LinkedHashMap和TreeMap 可能很多人只使用过HashM ...

  2. java1.8新增超实用Map方法——Map.getOrDefault()和Map.value()方法详解

    1. Map.getOrDefault() 翻译一下官方解释: java.util.Map<K, V> V getOrDefault(Object key, V defaultValue) ...

  3. Go 学习笔记(67)— Go 并发安全字典 sync.Map

    1. 并发不安全的 map Go 语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的. 换句话说,在同一时间段内,让不同 goroutine 中的代码,对同一个字典进行读写操作是 ...

  4. Python 常用内置函数map、zip、filter、reduce、enumerate

    Python 中有许多非常实用的内置函数,通过这些函数我们可以方便的实现某些功能,下面就列举一些常用的内置函数. 1. map() 函数 map() 可以根据提供的函数对指定序列做映射,它接受一个函数 ...

  5. 将request中的所有参数存放到自定义的map中

    /*** <获取参数map>* * @return 参数map* @throws Exception */protected Map<String, Object> getPa ...

  6. Map再整理,从底层源码探究HashMap

    前言 本文为对Map集合的再一次整理.内容包括:Map HashMap LinkedHashMap TreeHashMap HashTable ConcurrentHashMap Map Map< ...

  7. Java集合详解之Map

    一.首先看看集合框架体系图 从图中可以看到,Map接口扩展了Iterator接口,关于Iterator接口详解请移步:Iterator接口详解 二.Map是什么? Map<k,v>使用键值 ...

  8. 网络模型mAP计算实现代码

    网络模型mAP计算实现代码 一.mAP精度计算 这里首先介绍几个常见的模型评价术语,现在假设我们的分类目标只有两类,计为正例(positive)和负例(negtive)分别是: 1)True posi ...

  9. 2021年大数据常用语言Scala(二十二):函数式编程 映射 map

    目录 映射 | map 用法 案例一 案例二 映射  map 集合的映射操作是将来在编写Spark/Flink用得最多的操作,是我们必须要掌握的.因为进行数据计算的时候,就是一个将一种数据类型转换为另 ...

  10. 2021年大数据常用语言Scala(十八):基础语法学习 Map对象

    目录 Map对象 不可变Map 可变Map Map基本操作 Map对象 Map可以称之为映射.它是由键值对组成的集合.在scala中,Map也分为不可变Map和可变Map. 不可变Map 定义 语法 ...

最新文章

  1. 微信小程序上传图片到服务器不显示,微信小程序上传图片到服务器wx.uploadFile...
  2. sap中二级品报工问题解决方案
  3. java linkedlist源码_Java集合之LinkedList源码分析
  4. 代码模板在哪里_C++的可变参数模板
  5. Dapr牵手.NET学习笔记:状态管理之docker-compose发布
  6. zabbix监控工具
  7. English trip -- VC(情景课)4 A Health
  8. 东南亚本地商ERP仓储系统怎么样?
  9. 这个Wi-Fi安全漏洞偷跑了24年,可能危及全球所有设备!
  10. rest-framework框架的基本组件
  11. 【快讯】中国首个开源协议----木兰隆重发布
  12. C 语言 去除字符串中空格函数
  13. BT06串口蓝牙模块的配置以及与电脑的配对
  14. 微信小程序:block制作动态商品列表
  15. 信不信?各种红包 App 最后都会整合游戏!App+游戏的变现模式分析
  16. 量化交易 米筐 获取股票列表与历史合约数据
  17. 嫁人就嫁程序猿——钱多话少死的早!很励志。。。
  18. 2020年深圳杯C题
  19. Xilinx 7系列FPGA config设计文档
  20. 【leetcode】P110平衡二叉树的判断

热门文章

  1. 一文读懂:深扒人脸识别60年技术发展史
  2. AI论文引用排行榜丨微软第一,清华第九;Alphabet董事长看AI:美国仅领先5年,大陆追赶速度快;
  3. 轰动程序员圈的大事:女程序员将代码写到退休,返聘再续传奇
  4. 入职大厂,我容易吗?
  5. 雷军的“初恋”回来了
  6. mac -- 安装OpenCV
  7. Sqlserver 查询 临时字段
  8. 《高性能科学与工程计算》——3.7 习题
  9. 鸡蛋该放在哪些篮子里?多少合适?
  10. Bash中的逻辑运算