`
guoshaobin
  • 浏览: 14423 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

集合包

    博客分类:
  • java
阅读更多
    常用有collection和Map两个接口的实现类,collection用于存放多个单对象,Map用于存放key-value形式的键值对。
    collection分为两种类型的接口:list和set,两者最明显的差别为list支持放入重复的对象,而set不支持。List接口常用的实现类有:ArrayList、LinkList、Vector及Stack;Set接口常用的实现类有:HashSet、TreeSet,对于Collection的实现类而言,要重点掌握一下几点:
    collection的创建
    对应的为collection实现类的构造器,需要掌握在构造器方法中collection的实现类都做了些什么。
    往collection中增加对象
    对应的为collection中的add(E)方法,往collection中增加对象时collection的实现方式决定此方法的性能。
    删除collection中的对象
    对应的为collection中的remove(E)方法,实现类的实现方式决定了此方法的性能。
    获取collection中的单个对象
    对应的为collection中的get(index)方法。实现类的实现方式决定了此方法的性能。
    遍历collection中的对象
    对应的是通过collection的iterator方法获取迭代器,进而遍历。
    判断对象是否存在于collection中
    对应的是collection中的contains(E)方法,实现类的实现方式决定了此方法的性能。
    collection中对象的排序
    如何对collection中对象合理地排序也是使用collection对象时经常需要考虑的问题,但由于排序主要取决于所采取的排序算法。

对于Arraylist而言,最须注意的有一下几点:
Arraylist基于数组方式实现,无容量的限制:
Arraylist在执行插入元素时可能要扩容,在删除元素时并不会减小数组的容量(如希望相应的缩小数组容量,可以调用Arraylist的trimToSize()),在查找元素是要遍历数组,对于非null的元素采取equils的方式寻找:
Arraylist是非线程安全。
对LinkList而言,最要注意一下几点:
LinkList基于双向链表机制实现;
LinkList在插入元素时,须创建一个新的Entry对象,并切换相应元素的前后元素的引用;在查找元素时,须遍历链表;在删除元素时,要遍历链表,找到要删除的元素,然后从链表上将此元素删除即可,
LinkList是非线程安全的。
对于Vector而言,最要注意的一点:
Vector是基于Synchronized实现的线程安全的Arraylist,但在插入元素时容量扩充的机制和Arraylist稍有不同,并可通过传入capacityIncrement来控制容量的扩充。
Stack注意要点:
Stack基于Vector实现的,支持LIFO。
对于HashSet而言,最要注意的有一下几点:
HashSet基于HashMap实现,无容量限制
HashSet是非线程安全
对于TreeSet而言:
TreeSet和HashSet一样,也完全基于Map来完成的,并且同样也不支持get(int)来获取指定位置的元素,只是TreeSet基于的是TreeMap,除了这些基本的Set实现外,TreeSet还提供了一些排序方面的支持。例如传入Compartor实现、descendingSet及descendingIterator.
TreeSet基于TreeMap实现,支持排序:
TreeSet是非线程安全的。
对于HashMap而言:
HashMap而言,最要注意一下几点。
HashMap采用数组的方式存储key、value构成的Entry对象,无容量的限制:
HashMap基于key hash寻找Entry对象存放到数组的位置,对于hash冲突采用链表的方式来解决;
HashMap在插入元素时可能会要扩大数组的容量,在扩大容量时须要重新计算hash,并复制对象到新的数组中;
HashMap是非线程安全的。
it's never hid and you just have to light it
对TreeMap而言:
TreeMap基于红黑树实现,无容量限制;
TreeMap是非线程安全。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics