java collection详解
来源:互联网 发布:numpy 矩阵列归一化 编辑:程序博客网 时间:2024/06/05 04:35
collection和map的结构大概图:
从图中可以看出:主要分成list,set,map,queue(不常用)这四个,
List主要的类有ArrayList、LinkedList、Vector;
List类:
ArrayList:
基于数组(list)的存储方式,数据可以重复,有下标,与线程不同步,这是与Vector的最主要区别,所以效率高。
Vector
基于数组(list)的存储方式,数据可以重复,有下标,与线程同步,效率比ArrayList低,但安全性比较高。
linkedList
采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引,缺点:读取速度慢,
允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));
List总结:
ArrayList和Vector
读取速度快,插入和删除速度较慢,因为有下标可以查询,插入的时候只能先查询,后在最尾端判断无内容再插入
LinkedList
读取速度慢,插入和速度快,因为存储的方式不同,每个空间保留有下一个索引,索引插入的时候直接房间数组里,内部自行会判断索引内是否有值,无值就放入,
读取的时候只能从头到尾查找,
ArrayList 和 LinkedList 区别
ArrayList是动态数组, LinkedList是链表数组
查询方面,动态数组能直接指定下标获取数据,链表结构的,只能从开始一直查找到你所指定的下标, 找出数据, 所以 ArrayList会快 LinkedList
增加和删除方面:动态数组直接对原数据进行操作,链表数据知识对下标进行操作, 所以LinkedList 快ArrayList
Set类(特点:数据不能重复)
HashSet:基于set的存储,数据无序插入,且数据不能重复,重复会覆盖;
判断数据是不是重复根据数值的:hashcode,来判断
LinkedHashSet,数据插入时有序,但数据依旧不能重复。插入性能比hashset差
判断数据是不是相等根据:equal判断
TreeSet:数据插入时有序,数据依旧不能重复,靠自然排序和客户化排序
判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0
Set总结:
Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象,
Map类
HashMap是一个最常用的Map,遍历时,取数据是随机的,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为null,不允许多条记录的值为null。HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。
Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,然而,这也导致了Hashtable在写入时会比较慢。
LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢。有HashMap的全部特性。
TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iteraor遍历TreeMap时,得到的记录是排过序的。TreeMap的键和值都不能为空。
HashMap和HashTable区别:
1、hashtable与线程同步,效率较差但安全性较高。hashmap不与线程同步,效率较高但相对hashtable安全性较差
2、map的键值对可以为空,有且只有一个,hashtable不能为空
3、出示的数组容量不同。
总结:
1、ArrayList 单个元素,效率高,多用于查询。
2、Vector单个元素,安全性高,多用于查询。
3、LinkedList单个元素,效率高,多用于插入和删除,(如果频繁插入和删除优先考虑)
4、HashMap: 元素成对,元素可为空
5、HashTable:元素成键值对,元素不能为空。
- java collection详解
- Java Collection框架详解
- Java Collection框架详解
- Java Collection框架详解
- Java基础-Collection类详解
- Java集合类型Collection详解
- Java Collection与Collections详解
- Java集合详解Collection、Map
- java的Collection类详解
- Java Collection详解,Java中的集合框架Collection上
- Java Collection详解,Java中的集合框架Collection下
- Java 集合详解 一、Collection详解
- java的Collection和Map详解
- java的Collection和Map详解
- java的Collection和Map详解
- java的Collection和Map详解
- java的Collection和Map详解
- java的Collection和Map详解
- android 加密解密的一些零碎
- C++实现24点算法
- android权限大全
- iOS UI设计与开发 按钮、图标和图片
- 存储过程2
- java collection详解
- 画图类和动画类概览
- ExtJs Ajax 跨域问题的解决办法(Jsonp)
- quartz CronExpression表达式
- jboss7 vault 数据源密码加密 使用
- 第13周项目5-字符串操作(2)-2
- html+css+table实现注册页面设计
- C#线程池和进度条
- 随笔02