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. SpringBoot之配置

    回顾 SpringBoot之基础 配置文件 ① 两种全局配置文件(文件名是固定的) 配置文件放在src/main/resources目录或者类路径/config下 application.proper ...

  2. document.compatMode 浏览器渲染模式判定利器

    在加了DOCTYPE的页面document.compatMode输出CSS1Compat,不管加的是XHTML的还是HTML5的DOCTYPE.没有加的输出BackCompat. BackCompat ...

  3. Day05 -寻找自己:Ruby的self物件与singleton method

    前情提要:在第四天里,我们用参赛者的例子解说实体方法与类别方法.类别中的实体物件,想要玩弄方法时,可以有三种取用方式:(跟斯斯有三种一样) 该类别所定义的实体方法. 模块中可取得的实体方法.(关于模块 ...

  4. ucos中的中断管理

    一.中断的概念 中断是一种硬件机制,用于处理异步事件.中断的实时性比轮询要好,通过中断,微控制器可以在异常发生的时候立刻进行处理,而不需要不断轮询事件是否发生. CM3支持中断嵌套,使得高优先级异常可 ...

  5. 我的第一篇java笔记

    什么是程序 程序通常指完成某些事物的一种既定方式和过程. 在日常生活中,可以把程序看成一系列动作的执行过程和描述. Java介绍 Java是Sun Microystems于1995年推出的高级编程语言 ...

  6. myhabits where in foreach

    myhabits传入参数:类,其中类中包含字符串数组String[] 当查询where in String[]时 <select id="selectData" parame ...

  7. oracle优化(一)

    非原创 1. 选用合适的ORACLE优化器 ORACLE的优化器有3种: a. RULE(基于规则)b. COST(基于成本) c. CHOOSE(选择性) 选择缺省的优化器,可以通过对init.or ...

  8. iOS内置麦克风选择方法

    模式中的 voicechat用于VoIP是由系统进行默认选择的最适合的麦克风 模式中的AVAudioSessionModeVideoRecording默认选择上麦克风,离摄像头最近的那个,主要用于VO ...

  9. python 聊天程序(基于UDP)

    from threading import Thread from socket import * updSocket = socket(AF_INET,SOCK_DGRAM) updSocket.b ...

  10. leetcode1:两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 实例: 给定 nums = [2, 7, 11, 15],target = ...