1 Vector and ArrayList

它们都是可以随机访问的。它们的区别是Vector是线程安全的,而ArrayList不是线程安全的。

2 HashMap的底层实现机制

2.1 底层数据结构

每一对key-value pair都有一个专门的数据结构来表示,即一个内部类Node<K,V>,

然后所有的key-value pair放在一个数组中,transient Node<K,V>[] table。

2.2 HashMap里面保存的数据

HashMap里面保存key value pare,并且还会生成hash值。不要被课本里面的用数组下标作为key的默认值所蒙蔽。

2.3 使用

2.3.1 HashMap里面是没有加同步机制的

2.4 计算hash的方法,即计算内部hash key的方法

hash key的计算是根据key来的,然后放入一个table中的一个bin中,bin中不同的key-value pair是通过key的不同来区分的。

也就是说,同一个bin中不允许出现两个相同的key。如果出现了的话,那么就是第二次冲突了。该HashMap处理二次冲突的办法很简单,就是直接将old value覆盖。

2.5 处理冲突的算法

冲突了的key-value pair都放在一个bin中,当bin中的成员总数小于8是,这个bin是一个链表,当bin中的成员总数大于等于8时,这个bin是一棵红黑树。

对于红黑树,插入和删除的时间复杂度都是O(logn)。

3 ConcurrentHashMap底层实现机制

3.1 底层的数据结构

3.2 ConcurrentHashMap里面保存的数据

3.3 加锁的方式和时机

用synchronized关键字进行加锁。加锁的时机?

3.4 使用

3.5 什么是random hash

ConcurrentHashMap类用的是什么random hash,这样做的目的是什么?

将ConcurrentHashMap的整个实现搞清楚了,然后再去研究random hash。

4 ArrayList

4.1 好的地方

底层是一个java数组,所以支持随机访问。

4.2 不好的地方

4.2.1 插入

在某个index处插入时,需要先把这个位置开始后面的所有元素都后移一个位置。然后再插入。

4.2.2 删除

删除一个元素时,需要把该元素后面的所有元素向前移动一个位置。

java常用的基础容器的更多相关文章

  1. Java常用的一些容器

    转自:https://www.cnblogs.com/LipeiNet/p/5888513.html 前言:在java开发中我们肯定会大量的使用集合,在这里我将总结常见的集合类,每个集合类的优点和缺点 ...

  2. Java常用API基础

    1:打开帮助文档2:点击显示,找到索引,看到输入框3:你要学习什么内容,你就在框框里面输入什么内容 举例:Random4:看包 java.lang包下的类在使用的时候是不需要导包的5:看类的描述 Ra ...

  3. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式

    概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程.关于线程 ...

  4. java基础3.0:Java常用API

    本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...

  5. java常用基础(一)

    Java常用基础(一) 原文写于2017-12-02 输入输出 //输入 Scanner in = new Scanner(new BufferedInputStream(System.in)); i ...

  6. Java基础 —— Java常用类

    Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@&quo ...

  7. Java 常用类总结(SE基础)

    本篇博客对java常用类相关知识进行了归纳总结,比较详细,适用于学习和复习. 1. 字符串相关的类 1.1 String String是一个final类,代表不可变的字符序列.不可被继承. Strin ...

  8. java常用英文解释

    java常用名词解释: OO: object-oriented ,面向对象 OOP:object-oriented programming,面向对象编程 Author:JCC Object:对象JDK ...

  9. Java 笔试面试 基础篇 一

    1. Java 基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法, 线程的语法,集合的语法,io 的语法,虚拟机方面的语法. 1.一个".java& ...

随机推荐

  1. 洛谷 P1618 三连击(升级版)【DFS/next_permutation()/技巧性枚举/sprintf】

    [链接]:https://www.luogu.org/problemnew/show/P1618 题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试 ...

  2. Codeforces 482B Interesting Array(线段树区间更新)

    题目链接 Interesting Array 区间更新.然后对于每一个约数重新求一遍区间的&值,不符合就跳出. #include <bits/stdc++.h> using nam ...

  3. PHP message: PHP Fatal error: require(): Failed opening required

    PHP message: PHP Warning: require(/data/wwwroot/blog.sgfoot.com/bootstrap/autoload.php): failed to o ...

  4. 小菜的系统框架界面设计-XiaoCai.WinformUI代码开源

    我的源码分享 曾经,看到别人漂亮的系统界面,合理的布局,可是却没有提供源码,道理很简单,就是有偿提供,实际上对于有些技巧的东西也并没有多么难,只是不懂原理,感觉到困难罢了. 而对于刚毕业的我,求知欲强 ...

  5. 基于WPF系统框架设计(7)-TextBox/PasswordBox在ViewModel中支持回车命令

    应用场景 我现在做一个系统登录功能,要求在PasswordBox上输完密码后回车,能够响应Enter事件,并执行ViewModel中对应的方法.如果登录成功则隐藏当前窗口显示主窗体,登录失败则焦点返回 ...

  6. Linux USB驱动数据结构

    struct usb_ctrlrequest {    __u8 bRequestType;    __u8 bRequest;    __le16 wValue;    __le16 wIndex; ...

  7. 规划设计系列3 | SketchUp+实景三维,方案现状一起看

    将SketchUp中建立的模型与实景三维模型进行集成,既可以充分发挥实景三维在地理空间记录方面的优势,又可以去除SketchUp在周边环境设计上的不足. 同时借助Wish3D Earth丰富的场景浏览 ...

  8. Linux下自动备份MySQL数据库详细操作步骤(转载)

    环境说明操作系统:CentOSIP:192.168.150.214Oracle数据库版本:Oracle11gR2用户:root 密码:123456端口:3306数据库:ts_0.ts_1.ts_2.t ...

  9. vue2 疑难问题 解析

    1.[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent ...

  10. win7 iis6怎么部署.net网站

    win7 iis6怎么部署.net网站,把本机当成网站服务器来简单介绍. 方法/步骤 1 首先在本机有一个可以正常运行的网站.比如vs2010中有一个网站项目,网站项目运行后正常. 2 打开iis6, ...