array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Queue集合,Map集合,HashSet、HashMap性能 - 爱码网

Queue集合

Queue集合用来实现队列,通常队列不允许随机访问队列元素,以下是Queue接口中的方法Queue集合,Map集合,HashSet、HashMap性能
PriorityQueue保存队列元素的顺序并不是按加入队列的顺序,而是按队列元素的大小进行重新排序。因此当调用peek0方法或者poll()方法取出队列中的元素时,并不是取出最先进入队列的元素,而是取出队列中最小的元素。从这个意义上来看,PriorityQueue 已经违反了队列的最基本规则:先进先出(FIFO)。
PriorityQueue的两种排序:
1.自然排序:采用自然顺序的PriorityQueue集合中的元素必须实现了Comparable接口,而且应该是同一个类的多个实例,否则可能导致ClassCastException 异常,要求集合里的其他对象和该对象是同一个类的实例。
2.定制排序:创建PriorityQueue 队列时,传入-一个Comparator对象,该对象负责对队列中的所有元素进行排序。采用定制排序时不要求队列元素实现Comparable接口,可用Lambda表达式代替。

Deque接口是Queue接口的子接口,代表双端队列,双端队列的操作方法:
Queue集合,Map集合,HashSet、HashMap性能
ArrayDeque它是一个基于数组实现的双端队列,创建Deque时同样可指定一个numElements参数,该参数用于指定Object[]数组的长度;如果不指定numElements参数,Deque 底层数组的长度为16。他既可当成栈使用又可以当成队列使用。

LinkedList类是List接口的实现类是一个List集合,可以根据索引来随机访问集合中的元素。除此之外,LinkedList 还实现了Deque接口,可以被当成双端队列来使用,因此既可以被当成“栈”来使用,也可以当成队列使用。下 面程序简单示范了LinkedList 集合的用法。
总体来说,ArrayList性能比LinkedList性能好。
如果需要遍历List集合元素,对于ArrayList、Vector 集合,应该使用随机访问方法(get) 来遍历集合元素,这样性能更好;对于LinkedList集合,则应该采用迭代器(Iterator) 来遍历集合元素。
如果需要经常执行插入、删除操作来改变包含大量数据的List 集合的大小,可考虑使用LinkedList集合。使用ArrayList、 Vector 集合可能需要经常重新分配内部数组的大小,效果可能较差。
如果有多个线程需要同时访问List集合中的元素,开发者可考虑使用Collections将集合包装成线程安全的集合。

Map集合

Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value都可以是任何引用类型的数据。Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false。
Map里的key和Set集合很像,value和List很像;
Map中的常用方法:Queue集合,Map集合,HashSet、HashMap性能
Map中包括一一个内部类Entry,该类封装了一个key-value对。Entry 包含如下三个方法:
1.Object getKey():返回该Entry里包含的key值。
2.Object getValue():返回该Entry里包含的value值。
3.Object setValue(V value):设置该Entry里包含的value值,并返回新设置的value值。
如果新的value覆盖了原有的value,put()方法返回被覆盖的value。
通常用map. remove(key)来删除key-value对
java8给Map新增的方法:Queue集合,Map集合,HashSet、HashMap性能
HashMap和Hashtable的关系类似于ArrayList和Vector的关系,他们主要有以下两点区别:
1.Hashtable是一个线程安全的Map实现,但HashMap 是线程不安全的实现,所以HashMap比Hashtable的性能高一点;但如果有多个线程访问同一个Map对象时,使用Hashtable实现类会更好。
2.Hashtable不允许使用null 作为key和value,如果试图把null值放进Hashtable中,将会引发NullPointerException异常;但HashMap可以使用null作为key或value。
HashMap中的key不能重复,但是value可以。
为了成功地在HashMap、Hashtable 中存储、获取对象,用作key的对象必须实现hashCode()方法和equals()方法。HashMap、Hashtable 也不能保证其中key-value对的顺序。类似于HashSet, HashMap、 Hashtable 判断两个key相等的标准也是:两个key通过equals()方法比较返回true,两个key的hashCode值也相等。
当使用自定义类作为HashMap、Hashtable的key时,如果重写该类的equals(Objectobj)和hashCode()方法,则应该保证两个方法的判断标准一致一当 两个key通过equals()方法比较返回true时,两个key的hashCode()返回值也应该相同。因为HashMap、Hashtable保存key的方式与HashSet保存集合元素的方式完全相同,所以HashMap、Hashtable 对key的要求与HashSet对集合元素的要求完全相同。
如果修改了作为key的可变对象和HashSet类似,我们难以再准确访问到该key以及和修改后的key”撞值“的key。

LinkedHashMap实现类是HashSet的子类,他使用双向链表来维护key-value 对的次序(其实只需要考虑key的次序),该链表负责维护Map的迭代顺序,迭代顺序与key-value对的插入顺序保持一-致。

Properties类是Hashtable 类的子类,该对象在处理属性文件时特别方便,他的key和value都只能是字符串型。Properties 类可以把Map对象和属性文件关联起来,从而可以把Map对象中的key-value对写入属性文件中,也可以把属性文件中的“属性名=属性值"加载到Map对象中。以下三个方法可以用来修改它里面的key,value值Queue集合,Map集合,HashSet、HashMap性能
两个读写属性文件的方法(看不懂)Queue集合,Map集合,HashSet、HashMap性能

SortedMap是Map的子接口,他有一个TreeMap实现类。
TreeMap的两种排列方式:
1.自然排序: TreeMap 的所有key必须实现Comparable接口,而且所有的key应该是同一个类的对象,否则将会抛出ClassCastException异常。
2.定制排序:创建TreeMap时,传入一 个Comparator对象,该对象负责对TreeMap中的所有key进行排序。采用定制排序时不要求Map的key实现Comparable接口。
根据key顺序访问key-value对的方法Queue集合,Map集合,HashSet、HashMap性能
WeakHashMap的用法和HashMap相似HashMap的key对实际对象是强引用,所以只要对象不销毁,就不会被当垃圾回收,在WeakHashMap中这些可能会被垃圾回收,也可能被自动删除。(WeakHashMap是弱引用实际对象)

IdentityHashMap中当且仅当两个key严格相等(key1 == key2)时,IdentityHashMap 才认为两个key相等;对于普通的HashMap而言,只要key1和key2通过equals()方法比较返回true, 且它们的hashCode值相等即可。他的key和value也可以是null

EnumMap是-一个与枚举类一起使用的Map实现,EnumMap中的所有key都必须是单个枚举类的枚举值。创建EnumMap时必须显式或隐式指定它对应的枚举类。其特点有:
1.EnumMap在内部以数组形式保存,所以这种实现形式非常紧凑、高效。
2.EnumMap根据key的自然顺序(即枚举值在枚举类中的定义顺序)来维护key-value对的顺序。当程序通过keySet()、entrySet()、 values()等 方法遍历EnumMap时可以看到这种顺序。
3.EnumMap不允许使用null作为key,但允许使用null 作为value。 如果试图使用null 作为key时将抛出NullPointerException 异常。如果只是查询是否包含值为null的key,或只是删除值为null的key,都不会抛出异常。

各Map类性能分析:HashMap比Hashtable快;TreeMap比HashMap、Hashtable慢,但他总处于有序状态;LinkedHashMap比HashMap慢一点,因为它要维持添加顺序;EnumMap性能最好,但是只能是一个枚举类的枚举值作为key。

HashSet、HashMap性能分析:他们的Hash属性:
Queue集合,Map集合,HashSet、HashMap性能
还有一个负载极限表示Hash表最大的填充程度,达到极限后他会将桶里原有的元素重新分配,成倍增加桶的数量。初始化容量可以巧妙使用。

相关文章: