`

JDk Set,Queue简单说明

    博客分类:
  • java
阅读更多

Set个人认为与Map没有多大区别,只是不能够存储重复元素和有些set不允许null值,在Java API叙述如下:

 一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1  e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。 
针对几种常见的set类大多实现结构和算法差不多,这里只是简单描叙几个有所差别的LinkedHashSet,ConcurrentSkipList
LinkedHashSet继承hashset,具有双重列表,其实在内部视线中,就是跟linkedhashmap差不多,只是将entry中key存储set值而value赋值一个永久不变的object(#1),这样虽然具有了linkedhashmap的唯一key,但是浪费了存储空间,但是我并没有找到维护其链表结构的源代码
#1
  private static final Object PRESENT = new Object();
  public boolean add(E e) {
 
        return map.put(e, PRESENT)==null;
    }
ConcurrentSkipList是一个基于ConcurrentSkipMap的可伸缩NavigatorSet的实现,主要就是说具有并发线程安全,视图导航(能够快速比对查找元NavigatorSet素),排序功能(SortSet)。与之对应的有ConcurrentSkipListMap,也是继承ConcurrentNavigatorMap与sortMap的实现,基本类似
 
 
Queue队列,基于Collection与Iterable的实现,具有存储元素与迭代输出的功能,双向队列基于单向队列实现,主要为实现单向队列的功能进行简单解析
ArrayQueue可变大小队列,非线程安全,基于数组实现
ArrayBlockingQueue:适合于使用生产者-消费者模式,固定大小数组final Object[] items,并且可以进行定时执行操作,从源代码上可以得出使用ReentrantLock与condition进行控制时间(比如delayqueue),即在我们使用时需要指定大小,并且可以使用poll(time,timeout)的方法进行时间控制,在scheduleThreadpoolexecutor有使用
Linked​BlockingQueue基于双向列表构建实现的节点队列,阻塞队列(即时容量默认,可指定容量大小,但是超过容量既不会再创建,变会出现供小于求)线程安全地的
PriorityQueue基于优先级的无界队列,其实就是进行排序,优先级高即排序顺序靠前,可以指定compator进行自定义排序,线程安全的PriorityBlockingQueue
ConcurrentLinkedQueue其实是和ConcurrentLinkedlist在特性上是差不多的,但是线程安全使用的是voltitle原子性操作,并非为锁机制

SynchronousQueue一种阻塞队列,个人从来没有用过,没有过应用场景不过从叙述中好像这种队列在某些场合非常起作用,,具体实现没有看懂,不过大概是通过voltitle逻辑判断来进行线程控制的,个人水平有限,下面是API的叙述,,其中每个插入操作必须等待另一个线程的对应移除操作 ,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有。不能在同步队列上进行 peek,因为仅在试图要移除元素时,该元素才存在;除非另一个线程试图移除某个元素,否则也不能(使用任何方法)插入元素;也不能迭代队列,因为其中没有元素可用于迭代。队列的 是尝试添加到队列中的首个已排队插入线程的元素;如果没有这样的已排队线程,则没有可用于移除的元素并且 poll() 将会返回  null。对于其他 Collection 方法(例如 contains),SynchronousQueue 作为一个空 collection。此队列不允许 null 元素。

同步队列类似于 CSP 和 Ada 中使用的 rendezvous 信道。它非常适合于传递性设计,在这种设计中,在一个线程中运行的对象要将某些信息、事件或任务传递给在另一个线程中运行的对象,它就必须与该对象同步。 

分享到:
评论

相关推荐

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    9.1.4 支持队列操作的queue 270 9.1.5 访问对象的iterator 273 9.1.6 排序收集的对象 276 9.1.7 使用泛型 280 9.2 键值对应的map 284 9.2.1 常用map操作类 284 9.2.2 访问map键值 288 9.3 重点复习 ...

    廖雪峰 Java 教程.doc

    使用Queue 使用PriorityQueue 使用Deque 使用Stack 使用Iterator 使用Collections IO File对象 InputStream OutputStream Filter模式 操作Zip 读取classpath资源 序列化 Reader Writer PrintStream...

    javalruleetcode-dsal:数据结构与算法个人整理

    Queue, Map ArrayList, LinkedList, Vector, CopyOnWriteArrayList HashMap JDK7, JDK8 ConcurrentHashMap JDK7, JDK8 HashTable, ThreadLocalMap, WeakHashMap Leetcode 刷题记录 栈实现队列、队列实现栈、猫狗队列...

    redisson:Redisson-具有内存中数据网格功能的Redis Java客户端。 超过50种基于Redis的Java对象和服务:Set,Multimap,SortedSet,Map,List,Queue,Deque,Semaphore,Lock,AtomicLong,Map Reduce,Publish Subscribe,Bloom过滤器,Spring Cache,Tomcat,Scheduler,JCache API,Hibernate, MyBatis,RPC,本地缓存..

    JDK兼容性:1.8-15,Android 产品特点 Redis复制设置(包括对和) Redis群集设置(包括对和) Redis Sentinel设置 仅具有从属主机的Redis Redis single(包括对和) 线程安全的实现 API API API 异步连接池 ...

    Java集合

    Java的集合大致上可分为:Set,List和Map三种体系,其中Set代表无序,不可重复的集合;List代表有序,重复的集合,而Map则代表具有映射关系的集合。Queue体系集合,代表一种队列集合实现。 Java集合就像是一个容器,...

    Redis客户端Redisson.zip

    【redis官方推荐】Redisson 是使用熟悉的Java数据结构来发挥Redis的威力,基于lettuce Redis客户端和Netty 4 ,兼容 Redis 2.6 and JDK 1.6 ,使用Apache License 2.0授权协议,阅读 wiki 来获取更多使用信息...

    Java 基础核心总结 +经典算法大全.rar

    LinkedList Queue接口Deque 接口 AbstractQueue 抽象类LinkedList ArrayDeque PriorityQueue 反射的思想及作用 反射的基本使用 获取类的 Class 对象构造类的实例化对象获取-个类的所有信息 获取类中的变量(Field) ...

    史上最全java面试,103项重点知识,带目录

    1. JDK 和 JRE 有什么区别? 1 2. == 和 equals 的区别是什么? 1 3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 3 4. final 在 java 中有什么作用? 4 5. java 中的 Math.round(-1.5) 等于多少...

    疯狂JAVA讲义

    7.5 Queue接口 266 7.5.1 LinkedList实现类 266 7.5.2 PriorityQueue实现类 269 7.6 Map 270 7.6.1 HashMap和Hashtable实现类 271 7.6.2 SortedMap接口和TreeMap实现类 276 7.6.3 WeakHashMap实现类 279 ...

    Java范例开发大全 (源程序)

     实例211 自定义Queue队列 373  实例212 List、Set与Array之间的相互转换 375  实例213 二分查找法的实现方法 377  实例214 模拟操作系统的进程调度 379  实例215 利用栈将字符串逆序输出 381  实例216 ...

    java范例开发大全(pdf&源码)

    实例211 自定义Queue队列 373 实例212 List、Set与Array之间的相互转换 375 实例213 二分查找法的实现方法 377 实例214 模拟操作系统的进程调度 379 实例215 利用栈将字符串逆序输出 381 实例216 动态的数组链表 382...

    java范例开发大全源代码

     1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7  实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  ...

    java范例开发大全

    实例211 自定义Queue队列 373 实例212 List、Set与Array之间的相互转换 375 实例213 二分查找法的实现方法 377 实例214 模拟操作系统的进程调度 379 实例215 利用栈将字符串逆序输出 381 实例216 动态的数组链表 382...

    javaSE代码实例

    14.6.1 Set接口及含义 286 14.6.2 HashSet类的使用 287 14.6.3 equals与hashCode方法重写规定的作用 288 14.6.4 LinkedHashSet类的使用 291 14.6.5 SortedSet接口与TreeSet类 292 14.6.6 自定义满足...

    Java范例开发大全(全书源程序)

    实例211 自定义Queue队列 373 实例212 List、Set与Array之间的相互转换 375 实例213 二分查找法的实现方法 377 实例214 模拟操作系统的进程调度 379 实例215 利用栈将字符串逆序输出 381 实例216 动态的数组...

    Java常见面试题208道.docx

    1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String ...

    java线程池概念.txt

    3:对线程池的基本使用及其部分源码的分析(注意:这里的源码分析是基于jdk1.6;) a:线程池的状态 volatile int runState; static final int RUNNING = 0; 运行状态 static final int SHUTDOWN = 1; 关闭状态;...

    Thinking in Java 4th Edition

    JDK HTML documentation ...................... 11 Exercises ............................... 12 Foundations for Java ............ 12 Source code ........................... 12 Coding standards ............

Global site tag (gtag.js) - Google Analytics