
集合
Franco蜡笔小强
小码农
展开
-
Map相关--这一篇全了解
目录 Map整体结构什么是HashMapHashMap实现原理分析 静态常量构造函数 添加元素扩容 树化操作红黑树插入红黑树拆分去树化操作综合示例HashMap和HashTable、TreeMap的区别HashMap与HashSet的关系HashMap 和 ConcurrentHashMap 的关系参考:Map整体结构首先...原创 2018-09-17 11:37:41 · 858 阅读 · 1 评论 -
List相关源码解析--这一篇全了解
ArrayList源码解析(基于JDK1.7,JDK1.8比较)ArrayList属性//JDK1.7public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{...原创 2018-09-10 11:07:08 · 288 阅读 · 0 评论 -
List基础--这一篇全了解
为什么需要集合 首先,Java是一门面向对象的语言,奉承一切皆对象的思想,在实际开发过程中,免不了要经常操作对象,而且会同时操作多个甚至大量对象,这时就需要一个专门存储这些对象的容器,这样就可以利用容器对象的特性来方便的进行操作。 其次,在Java中还有数组,也是一种容器,但和集合相比,数组长度不可变,只能存储同一种类型元素。 所以,Java提供了集合的概念,相比于数组,集合长度可变...原创 2018-09-10 11:02:44 · 366 阅读 · 0 评论 -
全网把Map中的hash()分析的最透彻的文章,别无二家。
你知道HashMap中hash方法的具体实现吗?你知道HashTable、ConcurrentHashMap中hash方法的实现以及原因吗?你知道为什么要这么实现吗?你知道为什么JDK 7和JDK 8中hash方法实现的不同以及区别吗?如果你不能很好的回答这些问题,那么你需要好好看看这篇文章。文中涉及到大量代码和计算机底层原理知识。绝对的干货满满。整个互联网,把hash()分析的如...转载 2018-08-22 18:04:16 · 287 阅读 · 0 评论 -
SynchronizedList和Vector的区别
转自:http://www.hollischuang.com/archives/498Vector是java.util包中的一个类。 SynchronizedList是java.util.Collections中的一个静态内部类。在多线程的场景中可以直接使用Vector类,也可以使用Collections.synchronizedList(List list)方法来返回一个线程安全的List。那么...转载 2018-06-13 16:00:40 · 4166 阅读 · 0 评论 -
[Map]-3-关于HashMap容量的初始化,还有这么多学问
为什么要设置HashMap的初始化容量我们之前提到过,《阿里巴巴Java开发手册》中建议我们设置HashMap的初始化容量。那么,为什么要这么建议?你有想过没有。我们先来写一段代码在JDK 1.7 (jdk1.7.0_79)下面来分别测试下,在不指定初始化容量和指定初始化容量的情况下性能情况如何。(jdk 8 结果会有所不同,我会在后面的文章中分析)public static void main(...转载 2018-05-31 11:53:42 · 5714 阅读 · 1 评论 -
[Map]-2-HashMap中傻傻分不清楚的那些概念
HashMap中重要的成员变量先来看一下,HashMap中都定义了哪些成员变量。上面是一张HashMap中主要的成员变量的图,其中有一个是我们本文主要关注的: size、loadFactor、threshold、DEFAULT_LOAD_FACTOR和DEFAULT_INITIAL_CAPACITY。我们先来简单解释一下这些参数的含义,然后再分析他们的作用。HashMap类中有以下主要成员变量:t...转载 2018-05-31 11:33:18 · 284 阅读 · 0 评论 -
[Map]-1-Hashtable、HashMap、TreeMap有什么不同
Map 是广义 Java 集合框架中的另外一部分,HashMap 作为框架中使用频率最高的类型之一,它本身以及相关类型自然也是面试考察的热点。今天我要问你的问题是,对比 Hashtable、HashMap、TreeMap 有什么不同?谈谈你对 HashMap 的掌握。典型回答Hashtable、HashMap、TreeMap 都是最常见的一些 Map 实现,是以键值对的形式存储和操作数据的容器类型...转载 2018-05-31 11:26:39 · 1063 阅读 · 0 评论 -
集合-subList的缺陷
我们经常使用subString方法来对String对象进行分割处理,同时我们也可以使用subList、subMap、subSet来对List、Map、Set进行分割处理,但是这个分割存在某些瑕疵。一、subList返回仅仅只是一个视图 首先我们先看如下实例:[java] view plain copy public static void转载 2017-09-21 21:53:30 · 1363 阅读 · 0 评论 -
集合-fail-fast机制
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList:注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失转载 2017-09-21 21:44:09 · 463 阅读 · 0 评论 -
集合-Map总结
在前面LZ详细介绍了HashMap、HashTable、TreeMap的实现方法,从数据结构、实现原理、源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结。 推荐阅读: HashMap HashTable HashCode TreeMap一、Map转载 2017-09-21 21:40:57 · 268 阅读 · 0 评论 -
集合-List总结
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList、LinkedList、Vector、Stack,通过这几个知识点可以对List接口有了比较深的了解了。只有通过归纳总结的知识才是你的知识。所以下面LZ就List接口做一个总结。推荐阅读: ArrayList LinkedList Vector转载 2017-09-21 21:39:22 · 297 阅读 · 0 评论 -
集合-Stack
在Java中Stack类表示后进先出(LIFO)的对象堆栈。栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的。每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下: Stack通过五个操作对Vector进行扩展,允许将向量视为堆栈。这个五个操作如下: 操作转载 2017-09-21 21:38:14 · 459 阅读 · 0 评论 -
集合-Iterator
迭代对于我们搞Java的来说绝对不陌生。我们常常使用JDK提供的迭代接口进行Java集合的迭代。[java] view plain copy Iterator iterator = list.iterator(); while(iterator.hasNext()){ String string = iterator.转载 2017-09-19 20:37:48 · 340 阅读 · 0 评论 -
集合-Vector
对于List接口这里还介绍一个它的实现类Vector,Vector 类可以实现可增长的对象数组。一、Vector简介 Vector可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。不过,Vector的大小是可以增加或者减小的,以便适应创建Vector后进行添加或者删除操作。 Vector实现List接口,继承AbstractList转载 2017-09-19 20:36:51 · 354 阅读 · 0 评论 -
集合-TreeSet
与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的。在《Java提高篇(二七)-----TreeMap》中LZ详细讲解了TreeMap实现机制,如果客官详情看了这篇博文或者多TreeMap有比较详细的了解,那么TreeSet的实现对您是喝口水那么简单。一、TreeSet定义我们知道TreeMap是一个有序的二叉树,那么同理TreeSet同样也是一个有转载 2017-09-19 20:34:56 · 321 阅读 · 0 评论 -
集合-TreeMap
TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致还是叫做TreeMap比较好。通过这篇博文你可以获得如下知识点: 1、红黑树的基本概念。 2、红黑树增加节点、删除节点的实现过程。 3、红黑树左旋转、右转载 2017-09-19 20:33:58 · 515 阅读 · 0 评论 -
集合-hashCode
hashCode的作用 要想了解一个方法的内在原理,我们首先需要明白它是干什么的,也就是这个方法的作用。在讲解数组时(java提高篇(十八)------数组),我们提到数组是java中效率最高的数据结构,但是“最高”是有前提的。第一我们需要知道所查询数据的所在位置。第二:如果我们进行迭代查找时,数据量一定要小,对于大数据量而言一般推荐集合。 在Java集合中有两类,一类转载 2017-09-19 20:32:20 · 390 阅读 · 0 评论 -
集合-HashTable
有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值。一个是前面提到的HashMap,还有一个就是马上要讲解的HashTable。对于HashTable而言,它在很大程度上和HashMap的实现差不多,如果我们对HashMap比较了解的话,对Has转载 2017-09-19 20:30:09 · 431 阅读 · 0 评论 -
集合-HashSet
在前篇博文中详细讲解了HashMap的实现过程,对于HashSet而言,它是基于HashMap来实现的,底层采用HashMap来保存元素。所以如果对HashMap比较熟悉,那么HashSet是so easy!!一、定义[java] view plain copy public class HashSet extends AbstractSet转载 2017-09-19 20:26:24 · 368 阅读 · 0 评论 -
集合-HashMap
HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,我们总是可以通过key快速地存、取value。下面就来分析HashMap的存取。 一、定义 HashMap实现了Map转载 2017-09-19 20:07:28 · 347 阅读 · 0 评论 -
集合-ArrayList
一、ArrayList概述 ArrayList是实现List接口的动态数组,所谓动态就是它的大小是可变的。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。默认初始容量为10。随着ArrayLis转载 2017-09-19 11:26:09 · 329 阅读 · 0 评论 -
集合-LinkedList
一、概述 LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口链表的实现。基于链表实现的方式使得LinkedList在插入和删除时更优于ArrayList,而随机访问则比ArrayList逊色些。 LinkedList实现所有可选的列表操作,并允许所有的元素转载 2017-09-19 09:16:25 · 373 阅读 · 0 评论 -
集合-集合大家族
在编写Java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList、HashMap、HashSet,也有不常用的Stack、Queue,有线程安全的Vector、HashTable,也有线程不安全的LinkedList、TreeMap等等!原创 2017-09-18 08:18:38 · 741 阅读 · 0 评论 -
Java中数组的特性
数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间。在C,C++等语言中,数组的定义简洁清晰,而在java中确有一些会让人迷惑的特性。本文就尝试分析这些特性。Java中的数组是对象吗?Java和C++都是面向对象的语言。在使用这些语言的时候,我们可以直接使用标准的类库,也可以使用组合和继承等面向对象的特性构建转载 2017-09-13 12:09:08 · 294 阅读 · 0 评论