最近事情比较少,闲暇之余温习巩固一下Java的一些基础知识,并做一些笔记,

Java常用集合,

主要参考的这篇文章:Java常用集合

ArrayList/Vertor

1. ArrayList 的主要消耗是数组扩容以及在指定位置添加数据,在日常使用时最好是指定大小,尽量减少扩容。更要减少在指定位置插入数据的操作。
2. 使用了 transient 修饰,可以防止被自动序列化。由于 ArrayList 是基于动态数组实现的,所以并不是所有的空间都被使用。 ArrayList 只序列化了被使用的数据。
3. 当对象中自定义了 writeObject 和 readObject 方法时,JVM 会调用这两个自定义方法来实现序列化与反序列化。
4. Voctor 也是实现于 List 接口,底层数据结构和 ArrayList 类似,也是一个动态数组存放数据。不过是在 add() 方法的时候使用 synchronize 进行同步写数据,但是开销较大,所以 Vector 是一个同步容器并不是一个并发容器。

LinkedList

1. LinkedList 底层是基于双向链表实现的,也是实现了 List 接口
2. LinkedList 插入,删除都是移动指针效率很高。
3. 查找需要进行遍历查询,效率较低。

HashMap

1. HashMap 底层是基于数组和链表实现的。其中有两个重要的参数:容量、负载因子,容量的默认大小是 16,负载因子是 0.75,当 HashMap 的 size > 16*0.75 时就会发生扩容(容量和负载因子都可以自由调整)。发生扩容时会对所有元素进行rehash
2. put 方法:首先会将传入的 Key 做 hash 运算计算出 hashcode,然后根据数组长度取模计算出在数组中的 index 下标。由于在计算中位运算比取模运算效率高的多,所以 HashMap 规定数组的长度为 2^n 。这样用 2^n - 1 做位运算与取模效果一致,并且效率还要高出许多。由于数组的长度有限,所以难免会出现不同的 Key 通过运算得到的 index 相同,这种情况可以利用链表来解决,HashMap 会在 table[index]处形成链表,采用头插法将数据插入到链表中。
3. get 方法:和 put 类似,也是将传入的 Key 计算出 index ,如果该位置上是一个链表就需要遍历整个链表,通过 key.equals(k) 来找到对应的元素。
4. 在并发环境下使用 HashMap 容易出现死循环。所以 HashMap 只能在单线程中使用,并且尽量的预设容量,尽可能的减少扩容。
5. 在 JDK1.8 中对 HashMap 进行了优化: 当 hash 碰撞之后写入链表的长度超过了阈值(默认为8),链表将会转换为红黑树。### 红黑树1. 红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。2. 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。

HashSet

1. HashSet 是一个不允许存储重复元素的集合。HashSet 的原理比较简单,几乎全部借助于 HashMap 来实现的。

LinkedHashMap

1. LinkedHashMap 其实就是对 HashMap 进行了拓展,使用了双向链表来保证了顺序性。
2. LinkedHashMap 的排序方式有两种:根据写入顺序排序。根据访问顺序排序。其中根据访问顺序排序时,每次 get 都会将访问的值移动到链表末尾,这样重复操作就能得到一个按照访问顺序排序的链表。

转载于:https://www.cnblogs.com/acbingo/p/9331398.html

Java常用集合笔记相关推荐

  1. java常用集合详解

    文章目录 一.常用集合大纲 1.常用集合框架及介绍 2.集合和数组的区别 二.Collection 集合(接口) 三.List集合(接口) 1.存储遍历方式 2.ArrayList(实现类) 3.Li ...

  2. java常用集合集合讲解

    一.java集合系列(ArrayList.LinkedList) java的集合主要分为List列表.Set集合.工具类(Iterator迭代器.Enumeration枚举类.Arrays和Colle ...

  3. Java常用框架笔记(1)

    Linux操作系统 重点在于使用,理论可以几乎忽略 学习原因: 我们一般是在Windows上开发,Linux上去做部署 市面上的常见的操作系统 Windows系列,unix系统,Linux系统,mac ...

  4. Java常用集合List、Map、Set介绍以及一些面试问题

    文章目录 集合框架图 常用接口介绍以及区别 常用接口类介绍 ArrayList LinkedList HashMap ConcurrentHashMap TreeMap LinkedHashMap H ...

  5. java接口与集合_【总结】Java常用集合接口与集合类

    目录常见集合接口概述Collection Map Collection接口 Map接口 补充内容 常见集合接口概述 Java中包含许多集合接口.其中比较常见的主要是Collection接口和Map接口 ...

  6. java 常用集合list与Set、Map区别及适用场景总结

    转载请备注出自于:http://blog.csdn.net/qq_22118507/article/details/51576319   list与Set.Map区别及适用场景 1.List,Set都 ...

  7. java代码实现图书管理_Java图书管理系统(用Java常用集合实现)(示例代码)

    图书管理系统 一.需求说明 1.功能:登录,注册,忘记密码,管理员管理,图书管理. 2.管理员管理:管理员的增删改查. 3.图书管理:图书的增删改查. 4.管理员属性包括:id,姓名,性别,年龄,家庭 ...

  8. Java常用集合体系以及相互区别

    Collection集合特点: 1.2.1一些 collection 允许有重复的元素,而另一些则不允许 1.2.2一些 collection 是有序的,而另一些则是无序的 [有序是指与添加的顺序一致 ...

  9. java常用集合浅层解析-面试必备

    ArrayList 1.动态数组 2.线程不安全 3.存储空间连续 4.查询快,添加删除慢 构造方法 /**+ Shared empty array instance used for default ...

最新文章

  1. 微信 request 合法域名校验出错
  2. R语言stringr包str_count函数计算字符串匹配个数实战
  3. 正则表达式的学习二:正则表达式的匹配规则总结
  4. Faster-RCNN+ZF用自己的数据集训练模型(Python版本)
  5. Java正则表达式:我最期望弄懂的知识,希望对大家都有帮助
  6. hashcode java_java 的Object类的hashcode()方法具体是怎么实现的?
  7. 基于 frida 实现的逆向工具包 hooker
  8. java 基础一 Http请求
  9. LightGBM参数调优代码详解
  10. 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(一)
  11. 把collections.Counter的计数结果转为pandas的DataFrame
  12. 校验身份证、组织机构代码证、纳税人识别号、营业执照号 的方法
  13. 网络流量分析netflow
  14. 社交媒体运营_在社交媒体上确定投诉相关帖子
  15. python中re.compile()用法详解
  16. 论坛项目小程序和h5登录
  17. 每个程序员都可以入手的小项目创意大集合
  18. 一个女测试工程师的成长之路
  19. android 六棱形分析图,Android自定义View_菱形图片
  20. CKeditor5自定配置字体大小

热门文章

  1. python代码文件方式_关于.py文件的详细介绍
  2. 安装mysql ubantu_安装mysql到ubuntu
  3. go和python对比的优缺点_Python与Golang对比
  4. python代码解读器_python文章生成器(附源码+讲解)
  5. 极简主义︱使用Turicreate进行快速图像分类迁移训练与预测(六)
  6. 理解mini-batch、Momentum、RMSpror、Admin优化算法
  7. python 类内置方法
  8. Flutter获取assets中的图像
  9. 【STM32 .Net MF开发板学习-03】TinyGUI绘图示例
  10. 循序渐进学Python 1 安装与入门