JDK里常见容器总结】的更多相关文章

自己总结.   扩容 线程安全   是否支持null 的key 说明 hashmap 2*length 否   是 1.8以后增加红黑树.提高检索效率 hashtable   是   否 官方不建议使用,若需要线程安全,请使用concurrentHashMap concurrentHashmap   是   否 分段加锁,相当于多个hashTable,效率提升N(默认16)倍            …
原文出处: javacodegeeks   译文出处:deepinmind 这也是篇老文了,相信很多人也看过.前面那些废话就不翻译了,直接切入正题吧~ 结构型模式: 适配器模式: 用来把一个接口转化成另一个接口. java.util.Arrays#asList() javax.swing.JTable(TableModel) java.io.InputStreamReader(InputStream) java.io.OutputStreamWriter(OutputStream) javax.…
Vim里常见的几个不可见字符:^@ = 0x00 Null值^I = 0x09 水平制表^J = 0x0A 换行^M = 0x0D 回车…
一.情有独钟 对数据结构情有独钟,打算慢慢把jdk里的实现都读一遍,发现其中的亮点,持续更新. 二.ArrayList 这应该是我们学习java最早接触的到的数据结构,众所周知,数组在申请了内存之后,无法扩展:而数组队列,是实现了动态扩容的功能,意义上是为动态数组,实际上的数组扩容是不允许在原地址上伸长的,很简单,因为在你申请的数组空间之后,可能存在别的被申请掉的内存:要实现动态数组,必然是新申请一个更大的连续内存空间,并替换到原来的引用中. 从构造函数,可以清楚看到,elementData,就…
这也是篇老文了,相信很多人也看过.前面那些废话就不翻译了,直接切入正题吧~ 结构型模式: 适配器模式: 用来把一个接口转化成另一个接口. java.util.Arrays#asList() javax.swing.JTable(TableModel) java.io.InputStreamReader(InputStream) java.io.OutputStreamWriter(OutputStream) javax.xml.bind.annotation.adapters.XmlAdapte…
C++ STL中常见容器的时间复杂度 map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O(logN) 查看:O(logN) 删除:O(logN) hash_map, hash_set, hash_multimap, and hash_multiset 上述四种容器采用哈希表实现,不同操作的时间复杂度为: 插入:O(1),最坏情况O(N). 查看:O(1),最坏情况O(N). 删除:O(1…
0.背景 来看一个项目需求:咖啡订购项目. 咖啡种类有很多:美式.摩卡.意大利浓咖啡: 咖啡加料:牛奶.豆浆.可可. 要求是,扩展新的咖啡种类的时候,能够方便维护,不同种类的咖啡需要快速计算多少钱,客户单点咖啡,也可以咖啡+料. 最差方案 直接想,就是一个咖啡基类,然后所有的单品.所有的组合咖啡都去继承这个基类,每个类都有自己的对应价格. 问题:那么多种咖啡和料的组合,都相当于是售卖的咖啡的一个子类,全都去实现基本就是一个全排列,显然又会类爆炸.并且,扩展起来,多一个调料,都要把所有咖啡种类算上…
一.Creational patterns 创建模式 Abstract factory (recognizeable by creational methods returning the factory itself which in turn can be used to create another abstract/interface type) 注意到都是 #newInstance(),一般是这是个静态方法,返回一个类本身的工厂对象.然后这个工厂对象可以去创建其他的抽象类型,最后创建什…
下面是JDK中有关23个经典设计模式的示例,在stakeoverflow也有相应的讨论:http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns Structural(结构模式) Adapter: 把一个接口或是类变成另外一种. java.util.Arrays#asList() javax.swing.JTable(TableModel) java.io.InputStreamReader(InputS…
JDK提供了一些高效的并发容器,下面介绍几个 ConcurrentHashMap:这是个高效的并发HashMap,可以理解为一个线程安全的HashMap. CopyOnWriteArrayList:这是一个List,从名字看就知道它和ArrayList是一族的,在读多写少的场合,这个List的性能非常好,远远优于Vector. ConcurrentLinkedQueue:高效的并发队列,使用链表实现,可以看作一个线程安全的LinkedList. BlockingQueue:这是一个接口,JDK内…
list支持快速的插入和删除,但是查找费时; vector支持快速的查找,但是插入费时. map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的.  如果我自己写,我也会用二叉检索树,它在大部分情况下可以保证对数复杂度,最坏情况是常数复杂度,而std::map在任何情况下都可以保证对数复杂度,原因是它保证存诸结构是完全二叉检索树,但这会在存诸上牺牲一些时间. STL   中的   map   内部是平衡二叉树,所以平衡二叉树的性质都具备.查找数据的时间也是对数时间. vector,在…
A/B测试背后有着高深的统计学知识,今天我们就来讲讲常见的辛普森悖论. 辛普森悖论 (Simpson's Paradox) 是英国统计学家 E.H.辛普森 (E.H.Simpson) 于1951年提出的悖论,即在某个条件下的两组数据,在分别讨论时都会满足某种性质,可是一旦合并起来进行考虑,却可能导致相反的结论. 举一个辛普森悖论的简单小例子:一个大学里有商学院和法学院两个学院.这两个学院的女生都抱怨"男生录取率比女生录取率高",有性别歧视.但是学校做总录取率统计,却发现总体来说女生录取…
http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archive/2012/09/18/2691096.html 在C++的STL库中,要实现排序可以 通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在通过 vector+sort进行排序时,所有元素需要先存入vector容器中,sort在排序时又需要将元素全部取出来再进…
      除了提供诸如同步控制,线程池等基本工具外,为了提高开发人员的效率,JDK已经为我们准备了一大批好用的并发容器,这些容器都是线程安全的,可以大大减少开发工作量.你可以在里面找到链表.HashMap.队列等.你可以在里面找到链表.HashMap.队列等.   JDK提供的这些容器大部分在java.util.con-current包中.    •ConcurrentHashMap:这是一个高效的并发HashMap.你可以理解为一个线程安全的HashMap.    •CopyOnWriteA…
摘要:在使用JDK中的同步容器时,应该尽量避免哪些坑 本文分享自华为云社区<[高并发]亿级流量高并发秒杀系统商品"超卖"了,只因使用的JDK同步容器中存在这两个巨大的坑!!(踩坑实录)>,作者:冰 河. 同步容器与并发容器 在JDK中,总体上可以将容器分为同步容器和并发容器. 同步容器一般指的是JDK1.5版本之前的线程安全的容器,同步容器有个最大的问题,就是性能差,容器中的所有方法都是用synchronized保证互斥,串行度太高.在JDK1.5之后提供了性能更高的线程安…
根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display属性值为“block”,成为“块级”元素(block-level):而span元素的默认display属性值为“inline”,称为“行内”元素. div这样的块级元素,就会自动占据一定矩形空间,可以通过设置高度.宽度.内外边距等属性,来调整的这个矩形的样子:与之相反,像“span”“a”这样的行内元素,则没有自己的独立空间,它是依…
一.MD5 MD5编码是最常用的编码方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码. MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是绝对的,但基本是不能一样的). MD5算法还具有以下性质: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的. 2.容易计算:从原数据计算出MD5值很容易. 3.抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别. 4.弱抗碰撞:已知原数据和其MD5值,想找到一个具有…
就是相当于dotnet的虚拟机,dotnet的运行时环境. JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库. 我们一般都是在安装JDK时,会提示是否安装JRE,通常都是安装,毕竟在开发时,我们也要看效果. 参考: http://baike.baidu.com/search/word?word=JRE…
- 已忽略版本控制的文件.可以通过Window → Preferences → Team → Ignored Resources.来忽略文件.A file ignored by version control. You can control what resources will be ignored by going to Window → Preferences → Team → Ignored Resources.  - 未纳入版本控制的文件,一般是新增,尚未提交的文件.A file n…
SUN公司在JDK中为程序开发者提供了各种实用类,这些类按功能不同分别被放入了不同的包中,供开发者使用,下面简要介绍其中最常用的几个包:1. java.lang — 包含一些Java语言的核心类,如String.Math.Integer.System和Thread,提供常用功能.在java.lang包中还有一个子包:java.lang.reflect用于实现java类的反射机制.2. java.awt — 包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些…
vector: 是一种在结尾处高效插入.删除的容器,本质上是一个动态数组,可以自动维护数组的空间分配.它也允许在开头和中间插入.删除数据,但是效率极低. <span style="font-size:10px;">#include <iostream> #include <vector> #include <string> using namespace std; void main(){ vector<string> str…
迭代器. 基本介绍(来源于网络):迭代器是一种抽象的概念.能够遍历容器内的 部分/全部 元素.每个迭代器中包含着元素的地址.  它可以将 抽象容器 和 泛型算法 结合起来.   大致原理: 1)迭代器对象 包含 容器内元素的地址. 2)通过设计,将元素操作统一. 个人理解: 1)迭代器的概念,有效整合不同容器和泛型算法.它提供了一个接口,用来操作容器内元素. 2)通俗理解:他是STL库的信息接口. 3)它要求所有操作应该有相同接口. 4)容器需要提供自己的迭代器,使用泛型算法尽量使用迭代器. 一…
map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O(logN) 查看:O(logN) 删除:O(logN) hash_map, hash_set, hash_multimap, and hash_multiset 上述四种容器采用哈希表实现,不同操作的时间复杂度为: 插入:O(1),最坏情况O(N). 查看:O(1),最坏情况O(N). 删除:O(1),最坏情况O(N). 记住,如果你采…
$.post和$.get是$.ajax的一种特殊情况: $.post和$.get请求都是异步请求,回调函数里写return来返回值是无意义的, 回调函数里对外部变量进行赋值也是无意义的. 即使是$.ajax里的同步请求,return的值并不能直接返回,这里涉及到跨域问题了, 回调函数里的return返回的值是直接返回给回调函数的,等待下次ajax调用时可以将值返回.…
本文主要解决以下问题 STL中sort的使用方法 使用sort对vector的排序 使用sort对map排序 使用sort对list排序 STL中sort的使用方法 C++ STL 标准库中的 sort() 函数,本质就是一个模板函数.该函数专门用来对容器或普通数组中指定范围内的元素进行排序,排序规则默认以元素值的大小做升序排序,除此之外我们也可以选择标准库提供的其它排序规则(比如std::greater降序排序规则),甚至还可以自定义排序规则. 值得一提的是,sort() 函数位于头文件中,因…
我们使用计算机接触最频繁的就是DOS.DOS是英文Disk Operating System的缩写,意思是“磁盘操作系统”,顾名思义,DOS主要是一种面向磁盘的系统软件,说得简单些,DOS就是人给机器下达命令的集合,是存储在机器硬件里头的一些命令集,有了DOS,我们就可以更容易理解怎么给机器下命令,不必去深入了解机器的硬件结构,也不必去死记硬背那些枯燥2进制数字的机器命令,只需通过一些接近于英语的DOS命令,我们就可以轻松地完成绝大多数的日常操作.另外,DOS还能有效地管理在它控制下的各种软硬件…
`````字符串中反斜杠字符表 转义格式    意义 \'  单引号(') \"  双引号(") \\  反斜杠(\ ) \n  换行 \r  返回光标至行首 \f  换页 \t  水平制表符 \v  重直制表符 \b  倒退 \0  空字符,字符值为零 \0oo    oo为两位八进制表示的字符 \xXX    XX为两位十六进制表示的字符 \uXXXX  Unicode 16的十六进制表示的字符 \UXXXXXXXX  Unicode 32的十六进制表示的字符 S.isdigit(…
具体使用有待商榷 filebeat.inputs: - type: container paths: - /var/log/containers/*.log processors: - add_kubernetes_metadata: host: ${NODE_NAME} matchers: - logs_path: logs_path: "/var/log/containers/" # To enable hints based autodiscover, remove `fileb…
容器是一个Java 所编写的程序,可当做一个工具,没有容器时必须自行编写程序以管理对象关系,现在容器都会自动做好. 有一说法:如果有一个类专门用来存放其它类的对象,这个类就叫做容器.另一说法:容器里存放的是对象的引用(或者说变量)而不是对象,对象还在容器外,容器内放的是对象的引用,类似于C语言的指针,也就是对象实例化后在堆内存中的地址,容器存放引用而不是存放对象本身也是容器设计巧妙的地方. 常用的容器有: WebSphere,WebLogic,Resin,Tomcat,Glassfish   …