Java集合类实现原理 1.Iterable接口 定义了迭代集合的迭代方法 iterator() forEach() 对1.8的Lambda表达式提供了支持 2....4.Set接口 插入无序 元素不能重复 底层均为Map集合实现 4.1 TreeSet类 先来瞅一眼这个类的继承关系吧 实现了AbstractSet拥有了Set的属性和方法 实现了NavigableSet...NavigableSet, Cloneable, java.io.Serializable { /** * 存放生成的TreeMap集合 */ private...[] table; //为entrySet和value提供一个缓存 transient Set> entrySet; //元素的数量 transient int size;...[] newTab = (Node[])new Node[newCap]; //初始化存储容器数组 table = newTab; 5.2.1 Hash数据结构 在java
1.2 Java中的实现 上一篇,阐述了队列的实现结构,通过图片的形式让大家有了更进一步的了解。 接下来,我,我们来看看队列在Java具体是如何成仙了,来看下Queue的代码!!!...在Java中,ArrayDeque、LinkedList、PriorityQueue等类实现了Queue接口,模拟了队列的数据结构。...其中,PriorityQueue是Queue直接子类实现,在原有基础上实现了元素的排序功能。...接下来,我们来具体介绍下这几个实现类。 1.2.1 Queue源码(基于JDK1.7.0_45) 在说Queue实现类之前,我们首先来了解下Queue到底提供了哪些功能!...传统队列实现了“先进先出”数据模型,而PriorityQueue则实现了最小的元素优先出队,剩余元素依次按照大小顺序出队。
本篇主要讲解ArrayDeque,通过名字可以看出,它底层数据结构由数组实现,既然是数组,想必也会实现自动扩容的机制!...1.2 ArrayDeque源码(基于JDK1.7.0_45) 值得一提的是,Java中有一个类叫做Stack,该类实现了栈结构。...但是,Java已经不提倡Stack来实现栈结构,而是建议使用ArrayDeque类; 来自Stack类描述: A more complete and consistent set of LIFO stack...可设置队列大小的构造函数: public ArrayDeque(int numElements) { allocateElements(numElements); } //带集合的构造函数...集合方法,又有Deque集合方法。
来源:阿凡卢, www.cnblogs.com/luxiaoxun/p/4638748.html 本文简要介绍Java并发编程方面常用的类和集合,并介绍下其实现原理。...从Java1.5开始JDK的atomic包里提供了一个类AtomicStampedReference来解决ABA问题。...这是一个典型的“有界缓存区”,固定大小的数组在其中保持生产者插入的元素和使用者提取的元素。一旦创建了这样的缓存区,就不能再增加其容量。...使用CAS来实现,是非阻塞式的“lock-free”实现。...参考: 《java并发编程的艺术》
本文简要介绍Java并发编程方面常用的类和集合,并介绍下其实现原理。 AtomicInteger 可以用原子方式更新int值。...从Java1.5开始JDK的atomic包里提供了一个类AtomicStampedReference来解决ABA问题。...这是一个典型的“有界缓存区”,固定大小的数组在其中保持生产者插入的元素和使用者提取的元素。一旦创建了这样的缓存区,就不能再增加其容量。...使用CAS来实现,是非阻塞式的“lock-free”实现。...参考:《java并发编程的艺术》
《Java集合详解系列》是我在完成夯实Java基础篇的系列博客后准备开始写的新系列。...哈 文章首发于我的个人博客: www.how2playlife.com 今天我们来深入探索一下LinkedHashMap的底层原理,并且使用linkedhashmap来实现LRU缓存。...使用LinkedHashMap实现LRU算法 如下所示,笔者使用LinkedHashMap实现一个符合LRU算法的数据结构,该结构最多可以缓存6个元素,但元素多余六个时,会自动删除最近最久没有被使用的元素...总结 本文从linkedhashmap的数据结构,以及源码分析,到最后的LRU缓存实现,比较深入地剖析了linkedhashmap的底层原理。...实现LRU可以直接实现继承linkedhashmap并重写removeEldestEntry方法来设置缓存大小。jdk中实现了LRUCache也可以直接使用。
一、集合的由来 通常,我们的Java程序需要根据程序运行时才知道创建了多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。...集合便应运而生了。 二、集合是什么? Java集合类存放在java.util包中,是一个用来存放对象的容器。 注意: 1.集合只能存放对象。...比如你存入一个int型数据66放入集合中,其实它是自动转换成Integer类后存入的,Java中每一种基本数据类型都有对应的引用类型。 2.集合存放的都是对象的引用,而非对象本身。...三、Java集合框架 首先,我们来看一张图 发现一个特点,上述所有的集合类,除了map系列的集合,即左边的集合都实现了Iterator接口。...6.Map被Hashtable实现。
今天用集合TreeSet来实现一个斗地主的分牌流程。 TreeSet集合的一个特点就是 元素有序,这样就方便我们分的牌自动排序。...0.思路 1.创建玩家手牌集合 我们到时候分的牌都存储在这里,但你可能会有疑问,因为存储的泛型是Integer,但扑克牌是有花色的,这该如何实现?...把牌放入牌堆 遍历我们的String数组,把花色和牌号组合一下并放入poke中,同时把poke中的key放入我们的洗牌集合中。最后不要忘了大小王。...Collections.shuffle(xipai); 5.进行分牌 如果只剩下最后三张了,就直接放入到我们的底牌集合当中,否则的话就进行模3取余操作进行判断应该分给谁。...}else wangwu.add(xipai.get(i)); } } //进行看牌,用方法实现
Set集合由Set接口和Set接口的实现类组成,Set接口继承了Collection接口,因此包含了Collection接口的所有方法。...HashMap的定义即是key不重复的集合。使用HashMap实现,这样HashSet就不需要再实现一遍。 所以所有的add,remove等操作其实都是HashMap的add、remove操作。...TreeSet类型是J2SE中唯一可实现自动排序的类型 TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。...但是TreeSet集合的存储是有序的,即:存储到集合中的元素是按自然顺序存储的。 判断元素唯一性的方式: 根据比较方法的返回值来判断。是0(零)就存入集合,不是0就不存。...Java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现了该接口的对象就可以比较大小。
modCount:记录当前集合被修改的次数 在所有的集合实现类中(Collection与Map中),都会有一个 modCount 的变量出现,它的作用就是记录当前集合被修改的次数。...当我们使用迭代器或 foreach 遍历时,如果你在 foreach 遍历时,自动调用迭代器的迭代方法,此时在遍历过程中调用了集合的add,remove方法时,modCount就会改变,而迭代器记录的modCount...是开始迭代之前的,如果两个不一致,就会报异常,说明有两个线路(线程)同时操作集合。
分类 ArrayList(重点) Vector LinkedList 1,ArrayList 数组结构实现,所有必须连续空间存储,查询快,增删慢。...JDK1.2之后加入,运行效率快,线程不安全 2,Vector 数组结构实现,所有必须连续空间存储,查询快,增删慢。...ArrayList List list = new ArrayList(); ArrayList list = new ArrayList(); 1,常用方法 见文章 Java集合(三) List...子接口 Java集合(二) Collection父接口 2,ArrayList遍历 1,使用迭代器遍历(Iterator) Iterator it = arrayList.iterator(); while...集合(三) List子接口 Java集合(二) Collection父接口 2,遍历 1,老四种遍历方式 2,中枚举器遍历 Enumeration en = vector.elements(); while
TreeMap实现了SotredMap接口,它是有序的集合。而且是一个红黑树结构,每个key-value都作为一个红黑树的节点。...public class TreeMap extends AbstractMap implements NavigableMap, Cloneable, java.io.Serializable...m.comparator(); try { buildFromSorted(m.size(), m.entrySet().iterator(), null, null); } catch (java.io.IOException...key进行排序,采用定制排序不要求Map的key实现Comparable接口。...至此TreeMap中实现的最重要已经说完了。
数据存储方式如下图所示: put方法简单解析 总结 HashMap采用hash算法来决定Map中key的存储,并通过hash算法来增加集合的大小。...keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。 “如果两个key的hashcode相同,你如何获取值对象?”...2、底层的数据结构 HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快的查询速度主要是因为它是通过计算散列码来决定存储的位置。...3、补充知识: HashMap是基于哈希表的 Map 接口的实现。 此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。...并不会向List的两种实现那样,在某项操作上性能较高,但是在基本操作(get 和 put)上具有稳定的性能。
它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。 ?...ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。...ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。...ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。和Vector不同,**ArrayList中的操作不是线程安全的!...(04) ArrayList实现java.io.Serializable的方式。当写入到输出流时,先写入“容量”,再依次写入“每一个元素”;当读出输入流时,先读取“容量”,再依次读取“每一个元素”。
注意:Map中的集合不能包含重复的键,值可以重复。每个键只能对应一个值。 Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值。...某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。 注: 将可变对象用作映射键时必须格外小心。...尽管无法强制执行此建议(因为接口不能包含构造方法),但是 JDK 中所有通用的映射实现都遵从它。...Set> entrySet(); //即将Map集合转化为Set集合。...} 三、具体实现 接口java.util.Map,包括3个实现类:HashMap、Hashtable、TreeMap。
List集合 List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。 List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。...List集合里添加了一些根据索引来操作集合元素的方法 一、ArrayList ArrayList是List接口的典型实现类,本质上,ArrayList是对象引用的一个变长数组。...subList(int index, int index) 方法是在给定的ArrayList集合中获取给定下标的子集合。注意范围是[)。 三、Vector Vector 可实现自动增长的对象数组。...java.util.vector提供了向量类(Vector)以实现类似动态数组的功能。...java.util包中的其他类中也都有这类方法,以便于用户获取对应的枚举类型。 在Enumeration中封装了有关枚举数据集合的方法。
Java 集合框架01-----Java集合总览 大家好,我是架构君,一个会写代码吟诗的架构师。...今天说一说Java 集合框架01-----Java集合总览,希望能够帮助大家进步!!! 今天开始阅读Java集合源码了。...Collection 主要有List,Set和Queue三个分支,Collection定义了集合的基本操作,如集合的查找,修改,合并 - List是一个有序队列,允许重复元素,其实现类ArrayList...其实现类有HashSet和TreeSet,HashSet的实现依赖于HashMap,TreeSet的实现依赖于TreeMap 2....Iterator是集合的遍历工具,即我们通常所说的Iterator迭代器。Collection依赖于Iterator,所有Collection的所有实现类都要依赖Iterator。 4.
比如手机验证码,发送之后需要缓存起来,然后处于安全性考虑,一般还要设置有效期,到期自动失效。我们怎么实现这样的功能呢? 解决方案 使用现有的缓存技术框架,比如redis,ehcache。...如果不考虑分布式,只是在单线程或者多线程间作数据缓存,其实完全可以自己手写一个缓存工具。下面就来简单实现一个这样的工具。...---- 代码 import java.util.HashMap; import java.util.Map; import java.util.concurrent.Executors; import...* * 键值对集合 */ private final static Map map = new HashMap(); /** * 定时器线程池,用于清除过期缓存 */...,不能容忍百万数据亚秒级失效延迟,必须保证严格失效时间的话,可以参考另一版实现(数据实体加入了过期时间,每次取出数据时会先做判断)。
1.创建集合,并使用forEach和迭代器分别遍历 public class CollectionDemo { /* * 1.创建集合对象 * 2.创建添加集合元素...ArrayList(); //2.添加元素 array.add(""); array.add(15); array.add("java...(); while(it.hasNext()){ System.out.println(it.next()); } } } 2.集合添加集合...,集合元素个数,集合化为Object数组(可以添加自定义对象) public static void main(String[] args) { //1.创建集合对象...ArrayList(); //2.添加元素 array.add(""); array.add(15); array.add("java
集合 集合就是Java中提供的一个容器,可以用来存储多个数据。...集合和数组的区别: 1、数据的长度固定的,集合的长度是可变的; 2、数组中存储的是同一类型的元素,可以存储基本数据类型,集合存储的都是对象; 学习集合的目标: 1、会使用集合存储数据; 2、会遍历集合,...把数据取出来; 3、掌握每种集合的特性; 集合框架学习方式: 1、学习顶层:学习顶层接口/抽象类中的共性方法,所有的子类都可以用; 2、使用底层:底层不是接口/抽象类,需要底层子类创建对象使用; 集合的结构图如下...: Java.util.Collection接口: 所有单列接口的最顶层接口,里面定义了所有单列结合共性的方法; 任意的单列集合都可以使用Collection接口中的方法; Collection接口中的方法...contains(Object obj):判断当前集合中是否包含给定的对象; boolean isEmpty():判断当前集合是否为空; int size():返回集合中元素的个数; Object[]
领取专属 10元无门槛券
手把手带您无忧上云