List:

  • ArrayList: 基于动态数组的有序集合。优点:可以根据索引index下标访问List中的元素,访问速度快;缺点是访问和修改中间位置的元素时慢(数组尾部插入元素以外)。
  • LinkedList: 基于双向链表的有序集合。优点:插入删除元素速度快,缺点:访问速度慢,只能遍历。
  • CopyOnWriteArrayList: 也是基于数组的有序集合,优点:线程安全(ReetrantLock 加锁)。 适用于 多读少写的场景下。
  • Vector: 基于数组的线程安全的集合。(方法被 synchronized修饰) 性能低于CopyOnWriteArrayList

   线程安全的list List list = Collections.synchronizedList(new ArrayList()); 注:该方法通用于collection集合

Set:

  • HashSet: 基于HashMap的不允许重复,允许null值的线程不安全的Set集合(遍历顺序基于HashCode)
  • TreeSet:SortedSet接口的实现类,顾名思义该Set集合是有序的(按照自然顺序排序或者自定义顺序排序),不允许null的非线程安全的集合(基于HashMap)

    基于红黑树的数据结构排序。不能依靠自然顺序排序的对象,需要实现Comparable接口的ComparaTo()方法 或者创建TreeSet时实现Comparator接口的compare()方法

  • LinkedHashSet:基于链表的Set集合,保证了元素的插入顺序。基于链表的基础,插入和删除元素速度快。
  • EnumSet: 操作效率最高的Set集合,只能存储某个枚举类的值。

  线程安全: ConcurrentHashSet(基于ConcurrentHashMap) ; Set set = Collections.synchronizedSet(new HashSet());

Map:

  • HashMap: 其键值均可存储null的非线程安全的集合
  • Hashtable: 键值均不可是null的线程安全集合 (线程安全是方法基于syschnoized关键字)
  • ConcurrentHashMap: 线程安全的HashMap (与Hashtable 区别是 ConcurrentHashMap使用的分段锁的操作 默认应该是16,每个分段上使用Lock锁) 键值都不允许null值
  • TreeMap: 常见的Map集合 针对key 按照从小到大进行了排序
// 默认是从小到达顺序, 此处重写了Compara方法,使其按照从大到小的顺序排列
Map map = new TreeMap(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
map.put("a","abc");
map.put("c","cde");
map.put("b","bde");
for(Object s:map.keySet())
{
System.out.println(s + "=" + map.get(s));
}
  • LinkedHashMap  基于双向链表的和hash值的实现的map.其特点是保证了map的存取顺序。

Queue:

  • PriorityQueue  基于动态数组的按照元素的大小自然排序的,不允许null值的队列
  • PriorityBlockingQueue 线程安全的队列
  • ArraryDeque 基于动态数组的双向队列,不允许有null值(根据null判断元素是否存在的依据)

  可以基于ArrayDeque实现队列(FIFO)的操作. 栈的操作也可以使用ArrayDeque实现(LIFO) 只需要在队列尾部进行增加和删除的操作

public class DequeTest<T> {

    public static void main(String[] args) {
//队列 先进先出FIFO
DequeTest dt = new DequeTest(5);
dt.push(5);
dt.push(3);
dt.push(9);
dt.push(7);
dt.push(2);
dt.push(6);
while(dt.size() > 0)
{
System.out.print(dt.pop() + " ,");
}
System.out.println("\n");
dt.push(7);
dt.push(2);
dt.push(6);
while(dt.size() > 0)
{
System.out.print(dt.pop() + " ,");
} } private ArrayDeque<T> deque = new ArrayDeque<T>();
private int size; public DequeTest(int size){
this.size = size;
} public boolean push(T obj){
if(deque.size() + 1 > this.size)
{
return false;
}
return deque.offerLast(obj);
} public T pop(){
return deque.pollFirst();
} public T peak(){
return deque.peekFirst();
}
public int size(){
return deque.size();
}
}

JAVA常用集合的更多相关文章

  1. Java常用集合笔记

    最近事情比较少,闲暇之余温习巩固一下Java的一些基础知识,并做一些笔记, Java常用集合, 主要参考的这篇文章:Java常用集合 ArrayList/Vertor 1. ArrayList 的主要 ...

  2. java常用集合详解 contains

    java集合是对常用数据集合的封装,差不多就是数组吧,验证某个元素是否在数据集合里,最原始的方法是,用个循环,"某个元素"与数据集合中的每个元素逐个进行比较. java 对常用的一 ...

  3. JAVA常用集合源码解析系列-ArrayList源码解析(基于JDK8)

    文章系作者原创,如有转载请注明出处,如有雷同,那就雷同吧~(who care!) 一.写在前面 这是源码分析计划的第一篇,博主准备把一些常用的集合源码过一遍,比如:ArrayList.HashMap及 ...

  4. JAVA 常用集合接口List、Set、Map总结

    java中频繁使用List.Set.Map接口,将其总结如下 它们的继承与实现关系如下: Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└ ...

  5. 链表与哈希表基本概念及Java常用集合

    -链表- 是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个 ...

  6. Java图书管理系统(用Java常用集合实现)

    图书管理系统 一.需求说明 1.功能:登录,注册,忘记密码,管理员管理,图书管理. 2.管理员管理:管理员的增删改查. 3.图书管理:图书的增删改查. 4.管理员属性包括:id,姓名,性别,年龄,家庭 ...

  7. java常用集合总结

    1.线程安全 线程安全就是说多线程访问同一代码,不会产生不确定的结果. 2.List类和Set类List类和Set类是Collection集合接口的子接口.Set子接口:无序,不允许重复.List子接 ...

  8. Java常用集合学习总结

    一  数组 数组可以存储基本数据类型和对象的一种容器,长度固定,所以不适合在对象数量未知的情况下使用. Arrays : 用于操作数组对象的工具类,里面都是静态方法. Arrays.asList:把A ...

  9. java 常用集合list与Set、Map区别及适用场景总结

     转载请备注出自于:http://blog.csdn.net/qq_22118507/article/details/51576319                  list与Set.Map区别及 ...

  10. 面试突击(五)——Java常用集合

    为了勾起回忆,我画了一个常用集合类的结构关系图,话不多说,详见下图: 实际开发中ArrayList/HashMap/HashSet是三种最常用的集合工具类,通过其结构关系图也能清晰的了解他们的特性,所 ...

随机推荐

  1. 微软Microsoft SQL server 之 MDS connection问题

    微软的MDS和DQS使用面大概还不太广的两个新产品,之前有说道DQS的system.web的register的问题,MDS的问题就经常会碰到链接的问题,当你的用户在Excel中经常都会发生以下问题的时 ...

  2. elasticsearch增删查改

    创建结构化索引 put http://127.0.0.1:9200/person{ "settings" : { "number_of_shards": 3, ...

  3. JavaScript中面相对象OOP

    方法 方法的原型链 <html> <head> <title></title> </head> <script type=" ...

  4. Kickstart自动化安装平台

    PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并 ...

  5. spring框架校验自定义注解

    起因: 项目开发时遇到一个问题是对于金额类型的字段,数据库中格式一般为BigDecimal类型,两位小数点,然后在接口定义中如果不定义成String类型的话,就不能使用@pattern注解限定格式,而 ...

  6. linux 下导出oracle数据库

    #变更用户su - oracle <<EOF#添加用户名/密码,目标文件地址和文件名 ,保存记录日志地址/文件名  full=y表示数据库全部导出,默认导出连接数据库的用户数据库对象 ex ...

  7. SpringCloud-day08-Hystrix断路器

    8.Hystrix断路器 8.1.Hystrix简介 在分布式环境中,许多服务依赖项中的一些必然会失败.Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互. Hys ...

  8. I/O系统(二)

    程序查询流程1测试指令,查询IO设备是否就绪.2传送指令,当已经就绪时,执行传送功能.3转移指令,未就绪时,转移至继续测试IO设备的状态.当需要启动某一IO设备时,必须将该程序插入到现行程序中.1,由 ...

  9. 监听端口,获取webService请求报文

    第一步下载我们的wsdl文件到本地 第二步建立一个测试webservice工程,把wsdl放在项目里面 第三步把测试webservice中的wsdlLocation改成localhost.....你的 ...

  10. Linux驱动之USB总线驱动程序框架简析

    通用串行总线(USB)是主机和外围设备之间的一种连接.USB总线规范有1.1版和2.0版,当然现在已经有了3.0版本.USB1.1支持两种传输速度:低速为1.5Mbps,高速为12Mbps.USB2. ...