Android集合用法整理

Set 接口
        Set 不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add 方法返回 false。Set 判断两个对象相同不是使用 == 运算符,而是根据 equals 方法。也就是说,只要两个对象用 equals 方法比较返回 true,Set 就不 会接受这两个对象。
HashSet
        1 不能保证元素的排列顺序,顺序有可能发生变化
        2 不是同步的
        3 集合元素可以是 null, 但只能放入一个 null
        当向 HashSet 结合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值来决定该对象在 HashSet 中存储位置。简单的说,HashSet 集合判断两个元素相等的标准是两个对象通过 equals 方法比较相等,并且两个对象的 hashCode() 方法返回值相 等。注意,如果要把一个对象放入 HashSet 中,重写该对象对应类的 equals 方法,也应该重写其 hashCode() 方法。其规则是如果两个对 象通过 equals 方法比较返回 true 时,其 hashCode 也应该相同。另外,对象中用作 equals 比较标准的属性,都应该用来计算 hashCode 的值。
LinkedHashSet
        LinkedHashSet 集合同样是根据元素的 hashCode 值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet 将会以元素的添加顺序访问集合的元素。
LinkedHashSet 在迭代访问 Set 中的全部元素时,性能比 HashSet 好,但是插入时性能稍微逊色于 HashSet。
TreeSet 类
        TreeSet 是 SortedSet 接口的唯一实现类,TreeSet 可以确保集合元素处于排序状态。TreeSet 支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向 TreeSet 中加入的应该是同一个类的对象。TreeSet 判断两个对象不相等的方式是两个对象通过 equals 方法返回 false,或者通过 CompareTo 方法比较没有返回 0。
        自然排序使用要排序元素的 CompareTo(Object obj)方法来比较元素之间大小关系,然后将元素按照升序排列。
        自然排序是根据集合元素的大小,以升序排列,如果要定制排序,应该使用 Comparator 接口,实现 int compare(T o1,T o2) 方法
Collection 接口
    Collection 是最基本的集合接口,一个 Collection 代表一组 Object 的集合,这些 Object 被称作 Collection 的元素。所有实现 Collection 接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的 Collection,有一个 Collection 参数的构造函数用于创建一个新的 Collection,这个新的 Collection 与传入的 Collection 有相同的元素。后一个构造函数允许用户复制一个 Collection。如何遍历 Collection 中的每一个元素?不论 Collection 的实际类型如何,它都支持一个 iterator() 的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问 Collection 中每一个元素。典型的用法如下:
Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) { 
  Object obj = it.next(); // 得到下一个元素 

List 接口
    List 继承自 Collection 接口。List 是有序的 Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在 List 中的位置,类似于数组下标)来访问 List 中的元素,这类似于 Java 的数组。跟 Set 集合不同的是,List 允许有重复元素。对于满足 e1.equals(e2) 条件的 e1 与 e2 对象元素,可以同时存在于 List 集合中。当然,也有 List 的实现类不允许重复元素的存在。除了具有 Collection 接口必备的 iterator() 方法外,List 还提供一个 listIterator() 方法,返回一个 ListIterator 接口,和标准的 Iterator 接口相比,ListIterator 多了一些 add() 之类的方法,允许添加,删除,设定元素, 还能向前或向后遍历。实现 List 接口的常用类有 LinkedList,ArrayList,Vector 和 Stack。
LinkedList
    LinkedList 实现了 List 接口,允许 null 元素。此外 LinkedList 提供额外的 get,remove,insert 方法在 LinkedList 的首部或尾部。这些操作使 LinkedList 可被用作堆栈(stack),队列(queue)或双向队列(deque)。注意 LinkedList 没有同步方法。如果多个线程同时访问一个 List,则必须自己实现访问同步。一种解决方法是在创建 List 时构造一个同步的 List:List list = Collections.synchronizedList(new LinkedList(...)); 
ArrayList
    ArrayList 实现了可变大小的数组。它允许所有元素,包括 null。ArrayList 没有同步。
size,isEmpty,get,set 方法运行时间为常数。但是 add 方法开销为分摊的常数,添加 n 个元素需要 O(n) 的时间。其他的方法运行时间为线性。每个 ArrayList 实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并 没有定义。当需要插入大量元素时,在插入前可以调用 ensureCapacity 方法来增加 ArrayList 的容量以提高插入效率。和 LinkedList 一样,ArrayList 也是非同步的(unsynchronized)。
Vector
    Vector 非常类似 ArrayList,但是 Vector 是同步的。由 Vector 创建的 Iterator,虽然和 ArrayList 创建的 Iterator 是同一接口,但是,因为 Vector 是同步的,当一个 Iterator 被创建而且正在被使用,另一个线程改变了 Vector 的状态(例如,添加或删除了一些元素),这时调用 Iterator 的方法时将抛出 ConcurrentModificationException,因此必须捕获该异常。
Stack 
    Stack 继承自 Vector,实现一个后进先出的堆栈。Stack 提供 5 个额外的方法使得 Vector 得以被当作堆栈使用。基本的 push 和 pop 方 法,还有 peek 方法得到栈顶的元素,empty 方法测试堆栈是否为空,search 方法检测一个元素在堆栈中的位置。Stack 刚创建后是空栈。
Map 接口
    Map 没有继承 Collection 接口。也就是说 Map 和 Collection 是 2 种不同的集合。Collection 可以看作是(value)的集合,而 Map 可以看作是(key,value)的集合。Map 接口由 Map 的内容提供 3 种类型的集合视图,一组 key 集合,一组 value 集合,或者一组 key-value 映射关系的集合。
HashMap
    HashMap 和 Hashtable 类似,不同之处在于 HashMap 是非同步的,并且允许 null,即 null value 和 null key。,但是将 HashMap 视为 Collection 时(values() 方法可返回 Collection),其迭代子操作时间开销和 HashMap 的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将 HashMap 的初始化容量设得过高,或者 load factor 过低。
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值