并发类容器-第一讲

一、基础知识夯实

1.首先是我们需要懂得几点是在java中的集中运算

直接看代码吧

public class IntToBinary {
    public static void main(String[] args) throws UnsupportedEncodingException {

        int data = 4;
        System.out.println("the 4 is "+Integer.toBinaryString(data));

        //位与  &(1&1=1 1&0=0 0&0=0)
        System.out.println("the 4 is "+Integer.toBinaryString(4));
        System.out.println("the 6 is "+Integer.toBinaryString(6));
        System.out.println("the 4&6 is "+Integer.toBinaryString(4&6));
        //位或 | (1|1=1 1|0=1 0|0=0)
        System.out.println("the 4|6 is "+Integer.toBinaryString(4|6));
        //位非~(~1=0  ~0=1)
        System.out.println("the ~4 is "+Integer.toBinaryString(~4));
        //位异或 ^ (1^1=0 1^0=1 0^0=0)(有相同的就是 1 )
        System.out.println("the 4^6 is "+Integer.toBinaryString(4^6));

        // <<有符号左移 >>有符号的右移  >>>无符号右移
        System.out.println("the 1 << 4 is "+Integer.toBinaryString(4 << 1));
        System.out.println("the 1 >>> 4 is "+Integer.toBinaryString(4 >>> 1));
        //取模的操作 a % (2^n) 等价于 a&(2^n-1)
        System.out.println("the 345 % 16 is "+(345%16)+ " or "+(345&(16-1)));

    }
}

 总结:我们知道的是,位运算是再接再2进制操作的,其他的运算也是最后要转化为 2 进制运算的,所以周期要长。

2.什么是hash:

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,

所有散列函数都有如下一个基本特性:根据同一散列函数计算出的散列值如果不同,那么输入值肯定也不同。但是,根据同一散列函数计算出的散列值如果相同,输入值不一定相同。

两个不同的输入值,根据同一散列函数计算出的散列值相同的现象叫做碰撞。衡量一个哈希函数的好坏的重要指标就是发生碰撞的概率以及发生碰撞的解决方案。任何哈希函数基本都无法彻底避免碰撞,常见的解决碰撞的方法有以下几种:1.开放寻址;2、再散列;3、链地址法(相同hash值的元素用链表串起来)。

3.比较 HashTable、HashMap、ConcurrentHashMap;

4.现在我们先说一下,为什么HashMap在高并发下是不安全的,原因是:在多线程情况下,会导致hashmap出现链表闭环,一旦进入了闭环get数据,程序就会进入死循环,所以导致HashMap是非线程安全的。

具体的可以参考文章:https://blog.csdn.net/qq_32534441/article/details/84202979

原文地址:https://www.cnblogs.com/lys-lyy/p/11072796.html

时间: 2024-11-08 20:58:43

并发类容器-第一讲的相关文章

并发类容器-第二讲

一.首先我们来熟悉一下跳表(数据结构和算法) 参考资料: https://www.cnblogs.com/seniusen/p/9870398.html https://blog.csdn.net/u010425776/article/details/54890215 跳表的由来:作用:存储有序序列,并且实现高效的查找与插入删除.存储有序序列最简单的办法就是使用数组,从而查找可以采用二分搜索,但插入删除需要移动元素较为低效.因此出现了二叉搜索树,用来解决插入删除移动元素的问题.但二叉搜索树在最坏

并发编程(9):同步类容器与并发类容器

1.同步类容器 同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作. 复合操作,如: 迭代(反复访问元素,遍历完容器中所有的元素) 跳转(根据指定的顺序找到当前元素的下一个元素) 条件运算 这些复合操作在多线程并发的修改容器时,可能会表现出意外的行为,最经典的就是ConcurrentModificationException,原因是当容器迭代的过程中,被并发的修改了内容,这是由于早期迭代器设计的时候并没有考虑并发修改的问题. 同步类容器:如古老的Vector.HashTble.这

架构师养成--7.同步类容器和并发类容器

一.同步类容器 同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作.复合类操作如:迭代(反复访问元素,遍历完容器中的所有元素).跳转(根据指定的顺序找到当前元素的下一个元素).以及条件运算.这些复合操作在多线程并发的修改容器时,可能会表现出意外的行为,最经典的便是ConcurrentModificationException,原因是当容器迭代的过程中,被并发的修改了内容,这是由于早期迭代器设计的时候并没有考虑并发修改的问题. 同步类容器:如古老的Vector/HashTable.

17.并发类容器设计

并发类容器设计 1.ConcurrentHashMap:代替散列普通的hashTable,添加了复合操作支持. private ConcurrentHashMap<String, Object> resultMap = new ConcurrentHashMap<String, Object>(); for (Map.Entry<String, Object> m : resultMap.entrySet()) { count += (Long) m.getValue(

同步类容器和并发类容器

一.同步类容器 同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作.复合类操作如:迭代(反复访问元素,遍历完容器中的所有元素).跳转(根据指定的顺序找到当前元素的下一个元素).以及条件运算.这些复合操作在多线程并发的修改容器时,可能会表现出意外的行为,最经典的便是ConcurrentModificationException,原因是当容器迭代的过程中,被并发的修改了内容,这是由于早期迭代器设计的时候并没有考虑并发修改的问题. 同步类容器:如古老的Vector/HashTable.

线程学习--(七)单例和多线程、同步类容器和并发类容器

一.同步类容器 同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作.复合类操作如:迭代(反复访问元素,遍历完容器中的所有元素).跳转(根据指定的顺序找到当前元素的下一个元素).以及条件运算.这些复合操作在多线程并发的修改容器时,可能会表现出意外的行为,最经典的便是ConcurrentModificationException,原因是当容器迭代的过程中,被并发的修改了内容,这是由于早期迭代器设计的时候并没有考虑并发修改的问题. 同步类容器:如古老的Vector/HashTable.

18.并发类容器MQ

package demo7.MQ; public class QueueData { private int id; private String name; private String taskCode; public QueueData() { } public QueueData(int id, String name, String taskCode) { this.id = id; this.name = name; this.taskCode = taskCode; } publi

Java线程同步类容器和并发容器(四)

同步类容器都是线程安全的,在某些场景下,需要枷锁保护符合操作,最经典ConcurrentModifiicationException,原因是当容器迭代的过程中,被并发的修改了内容. for (Iterator iterator = tickets.iterator(); iterator.hasNext();) { String string = (String) iterator.next(); tickets.remove(20); } //多线程使用Vector或者HashTable的示例

《大话数据结构》 第一讲.数据结构绪论 (读书笔记)

大话数据结构 导读笔记 第一讲: 一.基本概念和术语 (1)数据元素:是组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理.也被称为记录.   比如,在人类中,什么是数据元素呀?当然是人了. (2)数据项:一个数据元素可以由若干个数据项组成.   比如人这样的数据元素,可以有眼.耳.鼻.嘴.手.脚这些数据项,也可以有姓名.年龄.性别.出生地址.联系电话等数据项,具体有哪些数据项,要视你做的系统来决定. 数据项是数据不可分割的最小单位.在数据结构这门课程中,我们把数据项定义为最小单位,是