集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。
- Collection:Collection 是集合 List、Set、Queue 的最基本的接口。
- Iterator:迭代器,可以通过迭代器遍历集合中的数据
- Map:是映射表的基础接口
关系图:
集合框架:
Arrays工具类常用方法讲解
#################List##################################################
ArrayList详解,总结最关注的重点
(ArrayList详细讲解和LinedList详细讲解)LinkedList和 ArrayList的详细讲解
都不是线程安全的。如果有需要用Collections.synchronizedList方法。
queue的java容易理解版本
特性:先进先出。
queue的常见用法详解
#################List##################################################
#################Set##################################################
(HashSet和TreeSte的详细讲解)HashSet和TreeSet的区别
HashSet扩容机制
根据质数扩容:在时间和空间上的浪费,远大于你的想象。
(LinkedHashSet讲解)java集合类Set集合的常用实现类
#################Set##################################################
#################Map##################################################
1.HashMap详细讲解
HashMap详细讲解
特点:
你需要完全的线程安全的时候使用Hashtable,而如果你使用Java 5或以上的话,请使用ConcurrentHashMap
2.HashTable详细讲解(并发性不如concurrenthashmap;效率不如hashmap)
和hashmap相比特点:
1.继承的父类不同(已经废弃类dictionary);
2.不允许有null的键;
3.线程安全
3.concurrenthashmap详细讲解
特点:ConcurrentHashMap线程安全并且提高性能原因就在于:对map中的读是并发的,无需加锁;只有在put、remove操作时才加锁,而加锁仅是对需要操作的segment加锁,不会影响其他segment的读写,由此,不同的segment之间可以并发使用,极大地提高了性能。(ConcurrentHashMap的并发度就是segment的大小,默认为16,这意味着最多同时可以有16条线程操作ConcurrentHashMap,这也是ConcurrentHashMap对Hashtable的最大优势)
它为什么是线程安全的?内部类Segment继承了ReentrantLock重入锁
#################Map##################################################
总结:
*总结
如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是Java面向对象编程中抽象和多态思维的体现。