1.依赖Hash表的集合(HashSet,LinkedHashSet,HashMap,LinkedHashMap)都是由HashCode()和equals()方法保证唯一性自定义对象要重写HashCode()和equals()方法TreeSet和TreeMap是基于二叉树和红黑树的实现,实现Comparable或者Comparator接口来排序并且保证了唯一性 1package cn.itcast_02;2 3import java.util.Collection;4import java.util.HashMap;5import java.util.Map;6import java.util.Map.Entry;7import java.util.Set;8 9/...
背景当java程序在处理某一特定的任务时,大多是在同一jvm中,也就是在同一容器内,所以无可避免的会暂用一定的系统资源,造成原有业务上的系统卡顿.甚至是直接造成系统宕机,如果是直接在系统启动时增加系统资源,又会在任务空闲时造成资源上的空闲期,属于浪费系统资源,未能最大化的使用系统资源.因此,在这一环境背景下产生了任务异构服务的架构方式,即任务单独执行的服务,可以在处理任务时不会争抢原有容器的cpu等硬件资源,但是这种架构...
同步他的实现类似与ArrayList,但是使用了synchronized进行同步publicsynchronizedboolean add(E e) {modCount++;add(e, elementData, elementCount);returntrue;} privatevoid add(E e, Object[] elementData, int s) {if (s == elementData.length)elementData = grow();elementData[s] = e;elementCount = s + 1;}publicsynchronized E get(int index) {if (index >= elementCount)thrownew ArrayIndexOutOfBoundsException(ind...
Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用null 表示一个值不存在,现在Optional 可以更好的表达这个概念。并且可以避免空指针异常。Optional.of(T t) : 创建一个Optional 实例Optional.empty() : 创建一个空的Optional 实例Optional.ofNullable(T t):若t 不为null,创建Optional 实例,否则创建空实例isPresent() : 判断是否包含值orElse(T t) : 如果调用对象包含值,返回该值,否则返回torEls...
线程不安全的HashMap因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。效率低下的HashTable容器HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他线程访问HashTable的同步方法时,可能会进入阻塞或轮询状态。如线程1使用put进行添加元素,线程2不但不能使用put方法...
转发:大海巨浪 Java库本身就有多种线程安全的容器和同步工具,其中同步容器包括两部分:一个是Vector和Hashtable。另外还有JDK1.2中加入的同步包装类,这些类都是由Collections.synchronizedXXX工厂方法。同步容器都是线程安全的,但是对于复合操作,缺有些缺点:① 迭代:在查觉到容器在迭代开始以后被修改,会抛出一个未检查异常ConcurrentModificationException,为了避免这个异常,需要在迭代期间,持有一个容器锁。但是锁的...
Java中常见的容器由两类,Collection和Map,本文就简单叙述下两者。(排版不是太好,等有时间看看怎么排)1.CollectionCollection是集合的根接口,所有集合都是继承该接口而来,其下有List和Set子类,根据官方文档描述,不同的子类对于有序性、重复性、null、线程同步都有不同的策略,下边说明时主要也会从这四个方面说明。List主要包含ArrayList,LinkedList ,Vector,Set下主要包含HashSet,LinkedHashSet,TreeSet。类型名称底...
这个小节介绍Queue的最后一个工具,也是最强大的一个工具。从名称上就可以看到此工具的特点:双向并发阻塞队列。所谓双向是指可以从队列的头和尾同时操作,并发只是线程安全的实现,阻塞允许在入队出队不满足条件时挂起线程,这里说的队列是指支持FIFO/FILO实现的链表。 首先看下LinkedBlockingDeque的数据结构。通常情况下从数据结构上就能看出这种实现的优缺点,这样就知道如何更好的使用工具了。从数据结构和功能需求上可以得到...
1. 引言 这篇博客通过实现一个有界容器来表述Java里wait,notify,notifyAll的用法。这些关键词用的概率不高,但是阅读一些源码的时候还是经常会遇到,写一下增强记忆。 具体生产实践的时候,对于我来说我是不推荐程序员们直接使用这些的,JAVA1.5之后提供很多直接可用的线程安全的容器,能少写代码就少些代码,降低了测试的需求, 也减少出错的可能性。 2. 一个线程安全的容量有限的栈 先把代码贴上: package com.sabo.conc...
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。 什么是CopyOnWrite容器 C...
1,hashset:内部封装的是一个map,所以保证值不重复,线性不安全2,hashmap:内部为hash表,数组与链表,所谓的链表也就是entry内部类,此内部类有next,key,value字段,线性不安全3,arrayList:封装了数组,方便查找操作,线性不安全4,linkedList:内部有entry内部类,此内部类包含了next,prio,Element字段,这样可以实现链表操作,插入删除效率高,查找效率低一些,线性不安全原文:http://my.oschina.net/u/1169535/blog/...
为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。今天我们就来讨论下同步容器。 一、为什么会出现同步容器?在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。 注意Collection和Map是一个顶层接口,而List、Set、Queue则继承了Collection接...
一、List的解析 List是 java 中的有序列表,按照元素加入的顺序有序存储,元素可以重复,它的实现类主要包括 ArrayList、Vector 、LinkedList 等。 List 相关类图如下所示: List提供的方法声明如下图所示: List 继承自Collection 类,拥有Collection 所有的方法,如 add(E e)、size()、isEmpty()、remove(Object o)、clear()、itrator() 等,同时也有 Collection 没有的方法声明,如 List 提供了可以按照元素的...
在实际问题中我们经常需要处理数据,单纯依靠数组来存储数据对开发来说非常困难,java提供了一套容器来方便我们编程。对java容器有一个整体的了解对我们来说非常重要,这样在需要特定容器时,不会手忙脚乱,本文主要介绍java的一些基本容器,而不要仅知道使用ArrayList。下面的图片是java中的简单容器分类 --图片来自网络java定义了四种容器类型,List、Set、Queue和Map。其中List、Set、Queue都实现了Collection接口,下面来看看...
先来看下层次关系。如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口Collection (接口)├──List (接口)│ ├──LinkedList (实现类)│ ├──ArrayList (实现类)│ └──Vector (实现类)│ └──Stack (实现类)└──Set (接口) ├──TreeSet (实现类) └──Hashset (实现类) └──LinkedHashset (实现类) Map (接口)├──...