`

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 信道。它非常适合于传递性设计,在这种设计中,在一个线程中运行的对象要将某些信息、事件或任务传递给在另一个线程中运行的对象,它就必须与该对象同步。 

分享到:
评论

相关推荐

    JDK部分类UML图

    对于JDK1.6的集合框架,UML图提供了清晰的视图,展示了Collection接口及其子接口(如List、Set和Queue)以及它们的实现类(如ArrayList、LinkedList、HashSet、HashMap等)的结构。 JDK的集合框架是Java编程中最...

    jdk1.7源码包含util

    9. **Event模型**:Observer和EventListener接口,以及Observable类,构成了Java的简单事件发布/订阅模型。 10. **Properties类**:用于处理属性列表,常用于读写配置文件。 通过阅读和分析JDK 1.7的源码,我们...

    jdk1.6中文api

    ArrayList和LinkedList等实现了List接口,HashSet和TreeSet实现了Set接口,HashMap和TreeMap实现了Map接口。此外,还有Queue和Deque接口,以及PriorityQueue类,满足不同数据结构需求。 3. **IO流** Java 1.6的IO...

    JDK 帮助文档 中文

    - **集合框架**:Java集合框架包括List、Set、Queue、Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类,提供了数据存储和操作的通用解决方案。 - **多线程**:Thread类和Runnable接口是Java多线程...

    JDK1.6.02 API文档 手机版(全)

    - `interface Collection`:集合框架的基本接口,包含`List`、`Set`和`Queue`等子接口。 2. **集合框架**: - `ArrayList`和`LinkedList`:两种常见的列表实现,前者基于数组,后者基于链表。 - `HashMap`和`...

    java jdk api中文开发文档(免币)

    4. **集合框架**:Java集合框架包括List、Set、Queue和Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。文档解释了它们的特性和使用方法。 5. **输入/输出流**:Java I/O系统支持文件操作、网络...

    JDK_API_1_6中文版chm

    2. **集合框架**:在JDK 1.6中,集合框架得到了进一步完善,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)、Map(如HashMap和TreeMap)以及Queue(如ArrayDeque)等接口和实现类。此外,还有泛型...

    JDK 核心 API内含源码以及说明书可以自己运行复现.zip

    java.util包提供了许多实用工具类,如日期时间类、集合类(List、Set、Queue)、枚举、事件处理、随机数生成等。文件会详细介绍这些类的使用和功能。 6. **6.泛型.md** 泛型是Java 5引入的一个重要特性,允许在类...

    jdk1.8.CHM

    3. Collection接口:集合框架的基础,包括List、Set和Queue等子接口。 4. ArrayList和LinkedList:两种实现List接口的方式,分别代表动态数组和链表结构。 5. HashMap和HashSet:两种常用的Map和Set实现,HashMap...

    jdk类库详细解析再也找不到更详细的了

    4. **java.util.collections**:集合框架的核心,包括List、Set、Queue等接口,以及它们的实现类,如ArrayList、LinkedList、HashSet、TreeSet等。这些类提供了数据存储和管理的功能。 5. **java.util.Map**:Map...

    中文版_ JDK_ API _1.6

    JDK 1.6中的集合框架在`java.util`包下,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)、Map(如HashMap和TreeMap)以及Queue等接口及其实现。这些接口和类为数据存储和处理提供了强大的支持。 ...

    精通Java--JDK、数据库系统开发、Web开发基础与实例

    数据集合部分会涵盖Java集合框架,包括List、Set、Queue、Map等各种接口和实现类,以及泛型、迭代器、比较器等相关概念。这部分内容有助于读者在实际开发中高效地管理和操作数据。 网络编程章节则会讲解Java的...

    JDK API JDK

    3. **集合框架**:Java集合框架是`java.util`包的重要组成部分,包括List、Set、Queue等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类,为数据存储和处理提供了强大的支持。 4. **I/O与NIO**:Java的...

    scjp认证指南JDK1.6,jdk1.5

    3. **数组与集合**:理解数组的创建、访问和操作,以及单列集合(List、Set、Queue)和双列集合(Map)的使用,包括ArrayList、LinkedList、HashSet、HashMap等实现类。 4. **接口与抽象类**:接口与抽象类是实现...

    jdk-1.6.0 源代码 三

    此外,还包含了Set、Queue等接口的实现,对于理解和优化数据结构的使用有很大帮助。 9. **国际化与本地化**:JDK 1.6.0提供了对多语言环境的支持,这部分源代码解释了如何处理日期、时间、数字格式,以及字符串资源...

    JDK 6 API 中文版

    2. **集合框架**:JDK 6中的集合框架是Java编程的重要组成部分,它定义了多个接口,如`List`、`Set`和`Map`,以及实现这些接口的类,如`ArrayList`、`HashSet`和`HashMap`。此外,还引入了`Queue`接口和其实现,如`...

    Java JDK 6学习笔记——ppt简体版

    Java集合框架是存储和管理对象的重要工具,包括List、Set、Queue和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。JDK 6引入了泛型,增强了类型安全,同时对集合操作进行了优化。 五、I/O流 Java...

    Java JDK 实例宝典

    Java集合框架包括接口(如List、Set、Queue)和实现(如ArrayList、LinkedList、HashSet、HashMap等)。实例将演示如何使用这些集合类进行数据存储、查找和操作。 六、IO流与NIO Java IO流提供了一种读写数据的方式...

    [Java参考文档].JDK_API_1_6_zh_CN

    2. **集合框架**:如`java.util`,提供了各种数据结构,如列表(List)、队列(Queue)、集合(Set)和映射(Map),如`ArrayList`、`HashMap`和`LinkedList`等。 3. **输入/输出**:如`java.io`,包含了处理文件、...

    Java JDK10.1中英双语API文档

    2. **集合框架**:Java集合框架包括List、Set、Queue和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。它们为存储和操作对象提供了高效且灵活的方式。 3. **I/O流**:Java的I/O流系统支持对文件、...

Global site tag (gtag.js) - Google Analytics