浏览 4066 次
锁定老帖子 主题:JAVA集合类浅谈
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-22
最后修改:2011-07-22
JAVA集合类浅谈: 前言: 集合包是Java中最常用的包 集合包中常用的主要有Collection和Map两个接口的实现类Collection用于存放多个单对象Map用于存放Key-Value形式的键值对。 Collection中常用的又分为两种类型的接口List和Set两者最明显的差别为List支持放入重复的对象而Set不支持。List接口常用的实现类有ArrayList、LinkedList、Vector以及StackSet接口常用的实现类有HashSet、TreeSet 类图: 对于collection中的具体实现类不想多讲,相信使用JAVA一段时间的人基本都了解,大家可以看看API基本就可以了。注意一下源码的实现,这样才可以选择自己适用和编写高性能的代码。 稍微记录一下Iterator模式。 iterator()是用于遍历集合类的标准访问方法。 它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。 它的具体实现是这样的。 定义一个接口类 public interface Iterator { boolean hasNext(); Object next(); void remove(); } 在AbstractList抽象类中定义了一个内部类: private class Itr implements Iterator { int cursor = 0; int lastRet = -1; int expectedModCount = modCount; } iterator()方法的定义 public Iterator iterator() { return new Itr(); } next()方法 public Object next() { checkForComodification(); try { Object next = get(cursor); lastRet = cursor++; return next; } catch(IndexOutOfBoundsException e) { checkForComodification(); throw new NoSuchElementException(); } } 使用: Collection c = new ArrayList(); c.add("abc"); c.add("xyz"); for(Iterator it = c.iterator(); it.hasNext(); ) { String s = (String)it.next(); System.out.println(s); } 具体代码就不多解释了,额外说一下,list接口在iterator迭代的时候每次都会检查list对象是否发生改变(checkForComodification()),如果长度发生改变了,会抛出ConcurrentModificationException异常。 总结一下(来至林昊的书) ARRAYLIST 对于ArrayList而言最需要注意的有以下几点 1.ArrayList基于数组方式实现无容量的限制 2. ArrayList在执行插入元素时有可能会需要进行扩容在执行删除元素时并不会减小数组的容量如希望相应的缩小数组容量可以调用ArrayList的trimToSize()在执行查找元素时需要遍历数组对于非null的元素采取的为equals的方式来寻找 3.ArrayList是非线程安全的。 下一节将linkList双向链表。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-25
等你更新,呵呵
|
|
返回顶楼 | |
发表时间:2011-07-25
数组本身就有容量限制,长度不能超过Integer.MAX_VALUE
|
|
返回顶楼 | |
发表时间:2011-07-25
果然是浅谈
|
|
返回顶楼 | |
发表时间:2011-07-25
freish 写道 果然是浅谈
说话太实在了 |
|
返回顶楼 | |
发表时间:2011-07-25
确实够浅谈的
|
|
返回顶楼 | |