`
lyy3323
  • 浏览: 86011 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAVA集合类浅谈:1.1Arraylist

阅读更多
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异常。


数组的两大缺点:

1。若改变数组的大小就要创建一个新的数组,并需要从原数组复制所有的数据到新的数组

2。数组元素在内存中依次顺序存储,这意味着向数组插入一项要移动数组中的其他元素



  • 大小: 61.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics