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. Android 日期对话框DatePickerDialog

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@ ...

  2. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总【转】

    自学MVC看这里——全网最全ASP.NET MVC 教程汇总 http://www.cnblogs.com/powertoolsteam/archive/2015/08/13/4667892.html ...

  3. docker入门小结(二)

    11,网络使用 sudo docker run -d -P training/webapp python app.py sudo docker ps -l 这样将主机一个端口映射到容器中,由于app. ...

  4. 如何从底层调试docker

    How the docker container creation process works (from docker run to runc) Over the past few months I ...

  5. 关于Blind XXE

    关于Blind XXE 关于XXE,很早之前内部做过分享,个人觉得漏洞本身没太多的玩点,比较有意思主要在于:不同语言处理URI的多元化和不同XML解析器在解析XML的一些特性. 在科普Blind XX ...

  6. jsp中jquery用法一步刷新 验证用户名是否存在

    <script type="text/javascript"> /* $(document).ready(function(){ var id="ha&quo ...

  7. Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental……

    Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to th ...

  8. maximal-rectangle——找出最大矩形的面积

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...

  9. leetcode-Symmetric Tree 对称树

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  10. 【Python】程序在运行失败时,一声不吭继续运行pass

    在前面程序出现异常时,我们都会给一个提示,告诉用户,程序为什么会异常,但是现在我们想在程序出现异常时,不做处理,让程序默默的往下执行,不要做声. 那么我们就引入了pass语句 def count_wo ...