Android中使用的集合也是很常见的场景 毕竟Android也是基于Java开发 今天就简单的总结一下Java中的集合 对于以前知识的一个复习
言归正传不说那么多的废话
Java中的集合总体大概分成了两大部分
1.collection 2.map
collection下面大概有三种集合
(1)set集合
set集合的特性 :
不可以有重复的元素(继承自collection set共有属性 不可重复元素)
set进行判断不是使用==进行判断 而是使用equals进行判断
set集合进行存储的时候 会把新建的对象与已有的对象使用equals方法进行判断,如果返回false则set集合就会进行接受 否则拒绝
set集合里面存储的数据是没有顺序的 类似于一个罐子的方式进行存储
set集合的子类:
(1).hashset 具有良好的查找和存取功能向hashset集合进行存储对象的时候hashset会调用该对象的hashcode方法来得到该对象的code值 根据code值来决定该对象的存储位置
(2).linkedhashset 也是通过对象的code值进行保存数据的 是使用链表的形式进行维护元素的顺序 当我们遍历这个集合的时候 是使用它的这些添加顺序进行访问元素
linkedhashset是需要维护元素的插入数据的,所以它的性能要相对于hashset来说是比较低的 但是使用迭代访问set里面的元素的时候此集合会有很好的性能
(3)SortedSet 主要适用于排序
TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态
(4)EnumSet 枚举类型的集合(专门为枚举类集合设计的集合)很少使用就不过多的总结
(2)list集合
list集合特性:
存储必须要有顺序 每个元素都有相对应的索引 可以通过索引来访问指定位置的元素 索引是按照元素的添加顺序来的
list集合子类
(1)ArrayList(比较常用的集合类)
基于数组实现 可以动态的增加长度 再分配给object数组
(2)Vector
和arraylist的使用方法一样 不做过多的解释
(2.1)Stack
此集合是Vector的实现类 用于模拟栈先进先出的的数据结构
(3)LinkedList
实现list接口能进行队列的操作 可以通过索引来访问集合中的随机元素
实现deque接口 可以用来双端队列使用 也可以当做栈来使用
(3)queue:特性:
保持成一个队列形式(先进先出)的顺序 队列的头部保存着队列中存放时间最长的元素,队列的尾部保存着队列中存放时间最短的元素 不允许随机的来访问元素
map:
类似与一个小型的数据库 以键值对的形式进行存储的对象可以通过键来找到相应的值 因此此集合里面存储着两组值 一种是用来保存键 一种是用来保存值 两组值都可以是任意数据类型的 map的key不允许有重复 所以两个key进行比较总是返回fasle
总结:
set:
HashSet的性能总是比TreeSet好(特别是最常用的添加、查询元素等操作),因为TreeSet需要额外的红黑树算法来维护集合元素的次序。只有当需要一个保持排序的Set时,才应该使用TreeSet,否则都应该使用HashSet
对于普通的插入、删除操作,LinkedHashSet比HashSet要略慢一点,这是由维护链表所带来的开销造成的。不过,因为有了链表的存在,遍历LinkedHashSet会更快
list:
ArrayList(基于数组的线性表)、LinkedList(基于链的线性表)是线性表的两种典型实现
Queue代表了队列,Deque代表了双端队列(既可以作为队列使用、也可以作为栈使用)
因为数组以一块连续内存来保存所有的数组元素,所以数组在随机访问时性能最好。所以的内部以数组作为底层实现的集合在随机访问时性能最好。
内部以链表作为底层实现的集合在执行插入、删除操作时有很好的性能
进行迭代操作时,以链表作为底层实现的集合比以数组作为底层实现的集合性能好
map:
HashMap和Hashtable的效率大致相同,因为它们的实现机制几乎完全一样。但HashMap通常比Hashtable要快一点,因为Hashtable需要额外的线程同步控制
2) TreeMap通常比HashMap、Hashtable要慢(尤其是在插入、删除key-value对时更慢),因为TreeMap底层采用红黑树来管理key-value对
3) 使用TreeMap的一个好处就是: TreeMap中的key-value对总是处于有序状态,无须专门进行排序操作
ps:技术小白可能不是全面 请多关照