随笔分类 - 集合
Java集合
摘要:#背景 HashMap对于Java开发人员来说,应该是一种非常非常熟悉的数据结构了,应用场景相当广泛。 本文重点不在于介绍如何使用HashMap,而是关注在使用HashMap过程中,可能会导致内存泄露的情况,下面将以示例的形式展开具体介绍。 注意:理解本文的前提需要先熟悉HashMap原理。 为了更
阅读全文
摘要:以下是一些在Stackoverflow上经常被问起的与Java集合相关的问题。在你查阅这些问题之前,最好先去看看【Simple Java】Java集合框架的接口和类层次关系结构图。 什么时候优先选择LinkedList,而不是ArrayList ArrayList本质上是一个数组,它的元素可以直接通
阅读全文
摘要:Map是一个重要的数据结构,本篇文章将介绍如何使用不同的Map,如HashMap,TreeMap,HashTable和LinkedHashMap。 Map概览 Java中有四种常见的Map实现,HashMap,TreeMap,HashTable和LinkedHashMap,我们可以使用一句话来描述各
阅读全文
摘要:List概览 List,正如它的名字,表明其是有顺序的。当讨论List的时候,最好拿它跟Set作比较,Set中的元素是无序且唯一;下面是一张类层次结构图,从这张图中,我们可以大致了解java集合类的整体架构; ArrayList vs LinkedList vs Vector 从上面的类层次结构图中
阅读全文
摘要:使用Set集合的主要原因是因为Set集合里面没有重复的元素。Set集合有三个常见的实现类:HashSet,TreeSet,LinkedHashSet。什么时候,选择哪一个使用非常重要。简单的说,如果你关注性能,应该使用HashSet;如果你需要一个有序的Set集合,应该使用TreeSet;如果你需要
阅读全文
摘要:当需要对元素进行计数时,HashMap非常有用,如下例子,统计一个字符串中每个字符出现的次数: 输出结果: HashMap遍历 打印HashMap的元素 根据键值对的value排序 以下代码往TreeMap的构造函数传入一个比较器,来对map进行排序: 虽然有很多种方法来对HashMap进行排序,但
阅读全文
摘要:一般来说,Map是一种由键值对组成的数据结构,其中键(key)在Map中是不能重复的; 本篇文章总结了9个最常见的问题(关于Java Map及其实现类); 出于简单考虑,在代码例子中我将不使用泛型,因此,我将仅仅写上Map而不是写上Map<K, V>,且Map中的Key和Value都是可以比较的,意
阅读全文
摘要:Collection和Collections的区别 首先要说的是,"Collection" 和 "Collections"是两个不同的概念; 如下图所示,"Collection"是集合类(Collection)的顶级接口,然而”Collections“是一个提供了一系列静态方法的集合工具类; Col
阅读全文
摘要:以下内容基于jdk1.7.0_79源码; 关于HashSet、LinkedHashSet、TreeSet Set接口的实现类,最大特点是不允许出现重复元素; HashSet:基于HashMap实现,一个性能相对较好的Set; LinkedHashSet:基于LinkedHashMap实现,一个保存了
阅读全文
摘要:以下内容基于jdk1.7.0_79源码; 什么是EnumMap Map接口的实现,其key-value映射中的key是Enum类型; 补充说明 其原理就是一个对象数组,数组的下标索引就是根据Map中的key直接获取,即枚举中的ordinal值; 效率比HashMap高,可以直接获取数组下标索引并访问
阅读全文
摘要:以下内容基于jdk1.7.0_79源码; 什么是LinkedHashMap 继承自HashMap,一个有序的Map接口实现,这里的有序指的是元素可以按插入顺序或访问顺序排列; LinkedHashMap补充说明 与HashMap的异同:同样是基于散列表实现,区别是,LinkedHashMap内部多了
阅读全文
摘要:前言 以下内容基于jdk1.7.0_79源码; 什么是HashMap 基于哈希表的一个Map接口实现,存储的对象是一个键值对对象(Entry<K,V>); HashMap补充说明 基于数组和链表实现,内部维护着一个数组table,该数组保存着每个链表的表头结点;查找时,先通过hash函数计算key的
阅读全文
摘要:以下内容基于jdk1.7.0_79源码; 什么是集合迭代器快速失败行为 以ArrayList为例,在多线程并发情况下,如果有一个线程在修改ArrayList集合的结构(插入、移除...),而另一个线程正在用迭代器遍历读取集合中的元素,此时将抛出ConcurrentModificationExcept
阅读全文
摘要:以下内容基于jdk1.7.0_79源码; 什么是LinkedList List接口的链表实现,并提供了一些队列,栈,双端队列操作的方法; LinkedList补充说明 与ArrayList对比,LinkedList插入和删除操作更加高效,随机访问速度慢; 可以作为栈、队列、双端队列数据结构使用; 非
阅读全文
摘要:以下内容基于jdk1.7.0_79源码; 什么是Vector和Stack Vector:线程安全的动态数组 Stack:继承Vector,基于动态数组实现的一个线程安全的栈; Vector和Stack特点 Vector与ArrayList基本是一致的,不同的是Vector是线程安全的,会在可能出现线
阅读全文
摘要:各种原因,前两年做C语言去了,现在重新做JAVA, 感觉自己基础很不扎实,要好好学习啦, 先从简单的开始~ 以下内容基于jdk1.7.0_79源码; 什么是ArrayList 可以简单的认为是一个动态数组;实际上ArrayList就是用数组实现的,长度不够时,调用Arrays.copyOf方法,拷贝
阅读全文
