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. 关于SQL 导出脚本失败 及SQL 的重装

    说点题外话 最近跳到一家新公司 薪资比较客观 但是技术可能不太尽如人意 而且对.Net方向的开发好像不是很友好  自己也不知道该怎么办 一个人大老远跑这边来 附近也没有什么.net的公司和职位 房子租 ...

  2. python中configparser模块记录

    python中用来读取配置文件,配置文件的格式相同于windows下的ini配置文件 一.常用函数 read(filename) #读取配置文件,直接读取ini文件内容 sections() #获取i ...

  3. linux 安装 kafka&zookeeper

    安装kafka 1,下载kafka. #cd /usr/local #wget wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.1.1 ...

  4. windows 10 透明毛玻璃,winform和wpf方法

    win10的透明毛玻璃,winform和wpf方法,win7.8不能用,只是win10 public partial class Form1 : Form { [DllImport("use ...

  5. mysql 创建备份表

    mysql 中对已有表进行备份用到的语句 CREATE TABLE table_name_1  SELECT * FROM table_name_2; 这个语句是创建表1并且复制表2的结构和数据到表1 ...

  6. vim简单命令

    保存文件:普通模式(在  :)后面 1.wq 2.q 3.!q 4.shirft+zz  直接退出vim 5.set nu  设置行号 行号移动: 1.shift+1;移动到该行末尾 2.shirft ...

  7. 关于感受野 (Receptive field) 你该知道的事

    Receptive field 可中译为“感受野”,是卷积神经网络中非常重要的概念之一. 我个人最早看到这个词的描述是在 2012 年 Krizhevsky 的 paper 中就有提到过,当时是各种不 ...

  8. python_Tkinter1

    一个更详细的Tkinter笔记: 首先是最重要基础的,如何 创建一个窗口 窗口代码: #coding:utf8 import Tkinter show = Tkinter.Tk() show.titl ...

  9. JS-jquery对象和dom对象的属性操作区别

    <label class="">时间1</label> <label class="">时间2</label> ...

  10. Style- DataTrigger例子(Text长度)

    Text长度小于7时,边框变为红色 <Window.Resources> <local:L2BConverter x:Key="cvtr"/> <St ...