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. tabpanel如何隐藏页签表头以及基本用法总结

    tabpanel是extjs中一种比较常用的布局容器控件,也比较简单. ///1:相关的插件, var tabScrollerMenu = Ext.create("Ext.ux.TabScr ...

  2. 查找运行时间超过1天的frmweb进程

    EBS中经常会出现一些zombie的frmweb进程,特征是运行时间很长,占用CPU都(1个frmweb进程占用1个CPU线程100%资源)下面脚本是利用awk找到运行时间超过1天的frmweb进程, ...

  3. WordCount编码实现及单元测试(第二次作业)

    项目码云地址:https://gitee.com/zhujunlin/wc.git 一.题目思路 ========== 阅读完题目要求之后我很懵,因为之前从未使用过博客园和码云工具,对编程的目标需求也 ...

  4. vue实例

    <!--需求: 背景图片,进度条,减和重置按钮 进度条填满红色,值为100%,点击减时,进度条依次减十,减到0时换一张背景图片,减按钮消失,点击重置按钮时,进度条重新填满红色-->效果图: ...

  5. NABCD-课程表开发

    N:需求 1.学生录入课程需求. 2.学生对于空教室使用需求(自习或活动占用). 3.学生对于具体课程的查询需求. A:做法 基于安卓课程查询,录入系统. B:好处 1.满足课程表的基本需求 2.便于 ...

  6. 通过ajax返回值

    通过ajax获取数据 然后使用 在console.log可以得到值 但是 返回值的在另一个ajax却没有结果为空 百度了一下 才发现少加了这句话 这样同步就可以正常使用了

  7. 破损的键盘 (Broken Keyboard)--又名悲剧文本(线性表)

     题目: 你有一个破损的键盘.键盘上的所有键都可以正常工作,但有时Home键或者End键会自 动按下.你并不知道键盘存在这一问题,而是专心地打稿子,甚至连显示器都没打开.当你 打开显示器之后, 展现在 ...

  8. Django Rest Framework 视图和路由

    Django Rest Framework 视图和路由   DRF的视图 APIView 我们django中写CBV的时候继承的是View,rest_framework继承的是APIView,那么他们 ...

  9. DNS 原理

    一.DNS 是什么? DNS (Domain Name System 的缩写)的作用非常简单,就是根据域名查出IP地址.你可以把它想象成一本巨大的电话本. 举例来说,如果你要访问域名math.stac ...

  10. Checkbox的只读设置

    readonly和disabled属性均不生效.可按如下方式处理,记得引入jquery.js文件 <input type="checkbox" name="chk& ...