
集合Collection
文章平均质量分 74
Williamwhc
代码改变世界 + 我改变代码 = 我改变世界
展开
-
Java 集合深入理解(16):HashMap 主要特点和关键方法源码解读
读完本文你将了解到:点击查看 Java 集合框架深入理解 系列 - - 乾杯什么是 HashMapHashMap 的特点HashMap 的 13 个成员变量HashMap 的初始容量和加载因子HashMap 的关键方法HashMap 的 4 个构造方法HashMap 中的链表节点HashMap 中的添加操作HashMap 中的哈希函数 hashHashMap 中的初始化扩容...原创 2018-10-12 08:57:56 · 158 阅读 · 0 评论 -
Json字符串转对象和转List集合操作(alibabab版本)
以下为 alibabab 包各种 JSON 转换的方法总结:1. 所需引入的第三方包: <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <vers...原创 2018-10-06 08:52:37 · 2021 阅读 · 0 评论 -
Map集合遍历的4种方式以及Map集合嵌套的遍历方式
public class traverseMap { public static void main(String[] args) { HashMap<Integer,String> has = new HashMap<>(); has.put(1,"张三"); has.put(2,"李四"); has...原创 2018-10-06 08:49:08 · 820 阅读 · 0 评论 -
HashMap源码分析——常用方法详解
首先介绍resize()这个方法,在我看来这是HashMap中一个非常重要的方法,是用来调整HashMap中table的容量的,在很多操作中多需要重新计算容量。源码如下:1 final Node<K,V>[] resize() { 2 Node<K,V>[] oldTab = table; 3 int oldCap = (oldTa...原创 2018-10-16 11:07:16 · 180 阅读 · 0 评论 -
Java 集合源码解析(1):Iterator
Java 提供的 集合类都在 Java.utils 包下,其中包含了很多 List, Set, Map, Queue… 它们的关系如下面这张类图所示:可以看到,Java 集合主要分为两类:Collection 和 Map. 而 Collection 又继承了 Iterable< E > 接口,Iterable 接口内只有一个 iterator 方法,返回一个 Iterator ...转载 2018-10-10 20:55:54 · 102 阅读 · 0 评论 -
Java 集合源码解析(2):ListIterator
ListIterator根据官方文档介绍, ListIterator 有以下功能:允许我们向前、向后两个方向遍历 List; 在遍历时修改 List 的元素; 遍历时获取迭代器当前游标所在位置。注意,迭代器 没有当前所在元素一说,它只有一个游标( cursor )的概念,这个游标总是在元素之间,比如这样:初始时它在第 0 个元素之前,调用 next() 游标后移一位:...转载 2018-10-10 20:57:07 · 155 阅读 · 0 评论 -
Java 集合深入理解(3):Collection
什么是集合?集合,或者叫容器,是一个包含多个元素的对象; 集合可以对数据进行存储,检索,操作; 它们可以把许多个体组织成一个整体: 比如一副扑克牌(许多牌组成的集合); 比如一个电话本(许多姓名和号码的映射)。 什么是集合框架?集合框架是一个代表、操作集合的统一架构。所有的集合框架都包含以下几点:接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达...转载 2018-10-10 20:58:08 · 117 阅读 · 0 评论 -
Java 集合深入理解(4):List<E> 接口
在 Java 集合深入理解:Collection 中我们熟悉了 Java 集合框架的基本概念和优点,也了解了根接口之一的 Collection,这篇文章来加深 Collection 的子接口之一 List 的熟悉。List 接口一个 List 是一个元素有序的、可以重复、可以为 null 的集合(有时候我们也叫它“序列”)。Java 集合框架中最常使用的几种 List 实现...转载 2018-10-10 21:00:49 · 211 阅读 · 0 评论 -
Java 集合深入理解(5):AbstractCollection
什么是 AbstractCollectionAbstractCollection 是 Java 集合框架中 Collection 接口 的一个直接实现类, Collection 下的大多数子类都继承 AbstractCollection ,比如 List 的实现类, Set的实现类。它实现了一些方法,也定义了几个抽象方法留给子类实现,因此它是一个抽象类。抽象方法publi...转载 2018-10-10 21:02:57 · 151 阅读 · 0 评论 -
Java 集合深入理解(6):AbstractList
什么是 AbstractListAbstractList 继承自 AbstractCollection 抽象类,实现了 List 接口 ,是 ArrayList 和 AbstractSequentiaList 的父类。它实现了 List 的一些位置相关操作(比如 get,set,add,remove),是第一个实现随机访问方法的集合类,但不支持添加和替换。在 Abstrac...转载 2018-10-11 07:03:26 · 157 阅读 · 0 评论 -
Java 集合深入理解(7):ArrayList
什么是 ArrayListArrayList 是 Java 集合框架中 List接口 的一个实现类。可以说 ArrayList 是我们使用最多的 List 集合,它有以下特点:容量不固定,想放多少放多少(当然有最大阈值,但一般达不到) 有序的(元素输出顺序与输入顺序一致) 元素可以为 null 效率高 size(), isEmpty(), get(), set() it...转载 2018-10-11 07:06:23 · 134 阅读 · 0 评论 -
Java 集合深入理解(8):AbstractSequentialList
AbstractSequentialList 没有什么特别的,这里介绍是为了理解 LinkedList 更容易。什么是 AbstractSequentialList( Sequential 相继的,按次序的)AbstractSequentialList 继承自 AbstractList,是 LinkedList 的父类,是 List 接口 的简化版实现。简化在哪儿呢?简化在 A...转载 2018-10-11 07:07:39 · 149 阅读 · 0 评论 -
Java 集合深入理解(9):Queue 队列
什么是队列队列是数据结构中比较重要的一种类型,它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。队列有两种:单队列 循环队列单队列就是常见的队列, 每次添加元素时,都是添加到队尾:以数组实现的队列为例,初始时队列长度固定为 4,font 和 rear 均为 0:每添加一个元素,rear 后移一位。当添加四个元素后, rear 到了索...转载 2018-10-11 07:08:49 · 176 阅读 · 0 评论 -
Java 集合深入理解(10):Deque 双端队列
什么是 DequeDeque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋壳。Deque 继承自 Queue,直接实现了它的有 LinkedList, ArayDeque, ConcurrentLinkedDeque 等。Deque 支持容量受限的双端队列,也支持大小不固定的。一般双端队列大小不确定。Deque 接口定义了一些从头部...转载 2018-10-11 07:10:52 · 131 阅读 · 0 评论 -
Java 集合深入理解(11):LinkedList
日常开发中,保存一组数据使用的最多的就是 ArrayList, 其次就是 LinkedList 了。我们知道 ArrayList 是以数组实现的,遍历时很快,但是插入、删除时都需要移动后面的元素,效率略差些。而LinkedList 是以链表实现的,插入、删除时只需要改变前后两个节点指针指向即可,省事不少。今天来看下 LinkedList 源码。#LinkedList 继承结构...转载 2018-10-11 07:13:40 · 109 阅读 · 0 评论 -
Java 集合深入理解(12):古老的 Vector
都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这么相似。什么是 VectorVector 和 ArrayList 一样,都是继承自 AbstractList。它是 Stack 的父类。英文的意思是 “矢量”。Vector 成员变量1.底层也是个数组protected Object[] elementData; 2.数组元素个...转载 2018-10-11 07:16:49 · 116 阅读 · 0 评论 -
Java 集合深入理解(13):Stack 栈
数据结构中的 栈数据结构中,栈是一种线性数据结构,遵从 LIFO(后进先出)的操作顺序,所有操作都是在顶部进行有点像羽毛球筒:栈通常有三种操作:push 入栈 pop 栈顶元素出栈,并返回 peek 获取栈顶元素,并不删除我们自定义一个 栈 时只要实现上述三个主要操作即可,本文中将使用 Java 中的 LinkedList 实现一个栈。栈的使用场景:栈最主要的...转载 2018-10-11 07:18:36 · 157 阅读 · 0 评论 -
Java 集合深入理解(14):Map 概述
什么是 MapJava 中的 Map 接口 是和 Collection 接口 同一等级的集合根接口,它 表示一个键值对 (key-value) 的映射。类似数学中 函数 的概念。数学中的函数:一个 Map 中,任意一个 key 都有唯一确定的 value 与其对应,这个 key-value 的映射就是 map。Map 中元素的顺序取决于迭代器迭代时的顺序,有的实现类保证了元素输...转载 2018-10-11 07:19:40 · 151 阅读 · 0 评论 -
Map集合——(1) 常用方法与MapSet
package cn.itcast.p6.map.demo; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; ...原创 2018-10-06 08:56:08 · 258 阅读 · 0 评论 -
Set集合与Map集合
一、Set集合: 无序、不能出现重复元素、没有角标 的集合 Set的遍历方式: 1、直接打印System.out.println(set); 2、增强for循环foreach 3、迭代器遍历iterator 特点: 无序:...原创 2018-10-06 08:57:25 · 247 阅读 · 0 评论 -
集合collection
在开始讲集合之前,我们先说一下数组和集合的区别:数组是大小固定的;同一个数组只能存放类型一样的数据(基本类型,如int/引用类型);可创建可读并可写的数组,但不能创建只读的;操作快 集合大小事可变的;同一个集合只能存放引用类型的的数据(不能存放基本数据类型,但能存储基本类型的包装类,如Integer);可创建只读的的集合;功能多 容器类仅能持有对象引用(指向对象的指针),而不是将对象信息c...原创 2018-10-06 08:58:07 · 143 阅读 · 0 评论 -
Java 集合深入理解(17):HashMap 在 JDK 1.8 后新增的红黑树结构
读完本文你将了解到:点击查看 Java 集合框架深入理解 系列 - - 乾杯传统 HashMap 的缺点HashMap 在 JDK 18 中新增的数据结构 红黑树HashMap 中关于红黑树的三个关键参数HashMap 在 JDK 18 中新增的操作桶的树形化 treeifyBinHashMap 在 JDK 18 中新增的操作 红黑树中添加元素 putTreeValHashMap ...转载 2018-10-12 09:08:56 · 148 阅读 · 0 评论 -
使用Set集合对List集合进行去重
使用Set集合对List集合进行去重 前段时间正好遇到这样一个需求:我们的支付系统从对方系统得到存储明细对象的List集合,存储的明细对象对象的明细类简化为如下TradeDetail类,需求是这样的,我要对称List集合进行去重,这里的去重的意思是只要对象对象中的accountNo账号是相同的,就认为明细对象是相同的,去重之后要求是List集合或者Set集合。 在进行上面的需求对象...原创 2018-10-05 08:39:32 · 1045 阅读 · 1 评论 -
【Java】List集合移除比较
list在remove很容易报错,原因是,如果前面的元素被remove了,他的位置会被后面的元素挤掉,如果后面的这个元素正好是我们需要remove的,那么就会报错,下面写了3中安全的list集合remove方法比较,大家可以看看,这里增加了运行时间项目,用于粗略比较;用于比较性能,有精力的同学可以跑个十万次,百万次的数量级;1、常规的for循环,但是从后往前removepackage l...原创 2018-10-05 08:38:43 · 650 阅读 · 0 评论 -
list集合操作
1:列表是写在方括号的 [ ],用逗号分隔开的元素列表和字符串一样,列表同样可以被索引和截取list被截取返回一个包含所需元素的新列表可以用加号拼接的也可以用切片 与Python字符串不一样的是list中的元素是可以改变的 函数:len(list) 获取list的长度max(list) 获取最大值min(list) 获取最小值list(seq) 将元祖转...原创 2018-10-05 08:37:14 · 452 阅读 · 0 评论 -
去除List集合中的重复值
最近项目中需要对list集合中的重复值进行处理,大部分是采用两种方法,一种是用遍历list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合。但是赋给set集合后,由于set集合是无序的,原先的顺序就打乱了。所以我又想着能不能用set的特性进行去重又不打乱顺序呢?试了一下,也是可以的,几种方法在不同情况下都有各自的优势。现在将代码写出来,比较一下。 //s...原创 2018-10-05 08:35:21 · 120 阅读 · 0 评论 -
Java-HashMap底层实现原理和性能分析
摘要 HashMap是Java开发人员使用频率最高的一种数据类型。Java在实现键值对映射时定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap。JDK1.8对HashMap底层的实现进行了优化,比较重要的是引入红黑树的数据结构和扩容的优化。 HashMap根据键的hashCode值存储数据...原创 2018-10-02 09:32:55 · 235 阅读 · 0 评论 -
List接口和Set接口
List接口ArrayList针对数组的包装 非线程安全,性能更高LinkedList针对链表的包装Vector线程安全,性能相对较低如果List的保存的是自定义的java类,那么使用list的包含contains、移除remove等方法时,需要给自定义java类覆写equals方法,自定义判断两对象相同的规则。可以开发工具自动生成。public class Hell...原创 2018-10-01 13:15:34 · 190 阅读 · 0 评论 -
集合的实现原理
首先明白一点,Java中集合的根本就是数组和链表。 集合分为ArrayList 和LinkedList。ArrayList中封装的是数组,LinkedList中封装的是链表。数组与链表的区别: 1、数组中的内存地址连续,所以它的读取速度很快。缺点就是容量固定。 2、链表的写入速度很快,但是读取速度不如数组。ArrayList的实现原理我们先来new一个ArrayLis...原创 2018-10-01 13:11:45 · 866 阅读 · 0 评论 -
如何使用线程安全的HashMap
HashMap为什么线程不安全导致HashMap线程不安全的原因可能有两种:1、当多个线程同时使用put方法添加元素的时候,正巧存在两个put的key发生了碰撞(根据hash值计算的bucket一样),那么根据HashMap的存储原理,这两个key会添加多数组的同一个位置,这样一定会导致其中一个线程put的数据被覆盖丢失2、当多个线程同时检测到元素个数超过哈希表的size*loadFl...原创 2018-09-07 16:35:18 · 280 阅读 · 0 评论 -
Java集合:HashMap详解(JDK 1.8)
概述JDK 1.8对HashMap进行了比较大的优化,底层实现由之前的“数组+链表”改为“数组+链表+红黑树”,本文就HashMap的几个常用的重要方法和JDK 1.8之前的死循环问题展开学习讨论。JDK 1.8的HashMap的数据结构如下图所示,当链表节点较少时仍然是以链表存在,当链表节点较多时(大于8)会转为红黑树。本文地址:http://blog.youkuaiyun.com/v12341...原创 2018-09-07 13:34:58 · 649 阅读 · 0 评论 -
HashMap的put和get方法原理
概述JAVA中的数组,在添加或者删除元素的时候,都会复制一个新数组,比较耗内存。但是数组的遍历则是非常高效的。链表则是相反,遍历慢(需要遍历数组,一直找到值相等的元素才算找到),而添加和删除元素代价低。有没有办法结合两者的特点,做到寻找元素快,插入元素或者删除元素代价低呢?答案是利用哈利表。HashMap put操作当使用HashMap的put方法的时候,有两个问题要解决:...原创 2018-09-03 10:39:53 · 439 阅读 · 0 评论 -
list与map -底层如何实现
1:集合 2 Collection(单列集合) 3 List(有序,可重复) 4 ArrayList 5 底层数据结构是数组,查询快,增删慢 6 线程不安全,效率高 7 Vector 8 底层数据结构是...原创 2018-05-06 16:51:56 · 197 阅读 · 0 评论 -
集合各实现类的底层实现原理
ArrayList实现原理要点概括参考文献: http://zhangshixi.iteye.com/blog/674856l https://www.cnblogs.com/leesf456/p/5308358.htmlArrayList是List接口的可变数组非同步实现,并允许包括null在内的所有元素。 底层使用数组实现 该集合是可变长度数组,数组扩容时,会将老数组中的元素重新拷...原创 2018-05-06 16:38:52 · 104 阅读 · 0 评论 -
Map集合的四种遍历方式
1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 5 public class TestMap { 6 public static void main(String[] args) { 7 Map<Integer, String> ...原创 2018-05-06 15:42:57 · 110 阅读 · 0 评论 -
Java集合框架
第一节:集合框架概述与体系结构一:概述1、集合的概念:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象。 2、集合的作用:A:在类的内部,对数据进行组织;B:简而快速的搜索查找其中的某一条元素;C:有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关的元素;D:有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到...原创 2018-04-13 23:03:06 · 90 阅读 · 0 评论 -
Java集合常见问题
List,Set,Map三者的区别及总结 List:对付顺序的好帮手 List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象 Set:注重独一无二的性质 不允许重复的集合。不会有多个元素引用相同的对象。 Map:用Key来搜索的专家 使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是S...原创 2018-04-03 23:17:31 · 179 阅读 · 0 评论 -
5分钟搞定java集合框架
java集合就是一个容器。1. 集合概述l 为了保存不确定的数据,或者对象,以及保存具有映射关系的数据。l 所有的集合类都位于java.util包下。1.1. 什么是集合,有什么特点?面向对象语言对事物的体现都是以对象的形式存在,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。集合只用于存储对象,集合长度是可...原创 2018-04-01 08:09:35 · 158 阅读 · 0 评论 -
Java 集合深入理解(15):AbstractMap
什么是 AbstractMapAbstractMap 是 Map 接口的的实现类之一,也是 HashMap, TreeMap, ConcurrentHashMap 等类的父类。AbstractMap 提供了 Map 的基本实现,使得我们以后要实现一个 Map 不用从头开始,只需要继承 AbstractMap, 然后按需求实现/重写对应方法即可。AbstarctMap ...转载 2018-10-11 07:22:40 · 191 阅读 · 0 评论