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