论坛首页 入门技术论坛

JAVA集合类浅谈

浏览 4066 次
该帖已经被评为新手帖
作者 正文
   发表时间:2011-07-22   最后修改:2011-07-22

JAVA集合类浅谈:

前言:
  集合包是Java中最常用的包 集合包中常用的主要有Collection和Map两个接口的实现类Collection用于存放多个单对象Map用于存放Key-Value形式的键值对。 Collection中常用的又分为两种类型的接口List和Set两者最明显的差别为List支持放入重复的对象而Set不支持。List接口常用的实现类有ArrayList、LinkedList、Vector以及StackSet接口常用的实现类有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双向链表。

  • 大小: 61.3 KB
   发表时间:2011-07-25  
等你更新,呵呵
0 请登录后投票
   发表时间:2011-07-25  
数组本身就有容量限制,长度不能超过Integer.MAX_VALUE
0 请登录后投票
   发表时间:2011-07-25  
果然是浅谈
0 请登录后投票
   发表时间:2011-07-25  
freish 写道
果然是浅谈

说话太实在了
0 请登录后投票
   发表时间:2011-07-25  
确实够浅谈的
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics