java之list源码浅析

本文探讨了Java中的List接口及其常用实现类,包括ArrayList、Vector、LinkedList和CopyOnWriteArrayList。ArrayList基于数组实现,适合随机访问,而LinkedList适合频繁插入和删除。此外,还介绍了AbstractList和ListIterator,以及CopyOnWriteArrayList的并发特性。
摘要由CSDN通过智能技术生成

三大数据结构链表、树和图,顺序表作为其中的一种,可以说是平时编程中最长使用到的。List接口是顺序表在java中的实现,它有很多子接口和实现类,平时的编程中使用起来非常方便。但是更进一步,我们有必要对其实现和原理进行理解,并和数据结构中所学比较,并应用于平时的编程中,编写出高效率的代码。

首先看下list接口的层次关系,下图由本人根据jdk的类结构简单画的:


从上图可以看出,list接口有Collection接口衍生而出,那么首先了解下Collection接口。

Collection

collection 是集合框架的根,他定义的集合操作的通用行为,如添加元素、批量添加、删除、批量删除、集合大小、包含、迭代器等。它的接口定义这里不再贴,在关系上,Collection是继承于Iterable接口的,其只有一个方法:

public interface Iterable<T> {
 
    /**
     * Returns an {@link Iterator} for the elements in this object.
     *
     * @return An {@code Iterator} instance.
     */
    Iterator<T> iterator();
}

其中Iterator如下:

public interface Iterator<E> {
  
    public boolean hasNext();
 
   
    public E next();
 
  
    public void remove();
}

AbstractCollection

AbstractCollection 是Collection接口的抽象实现,实现了其中大部分的功能。如下所示,我们实现自己的Collection只需要实现三个方法即可:

Collection<String> c =
           /**
        *
        *自定义实现示例,在AbstractCollection 中的一些方法的实现中,如Clear,调用了
        *iterator()方法,而在这些方法在子类中,实现这是典型的template模式。
        *
        */
       new AbstractCollection<String>() {
 
           /* *
            * 迭代器
            */
           @Override
           public Iterator<String> iterator() {
              // TODO Auto-generated method stub
              return null;
           }
 
           /*
            * 大小
            */
           @Override
           public int size() {
              // TODO Auto-generated method stub
              return 0;
           }
          
           /*
            * 抽象实现是抛出异常,我们需要自己实现
            */
           @Override
           public boolean add(String e) {
              return true;
           }
       };

如下代码片段摘自AbstractCollection,调用了iterator方法,其中有很多类似代码,如addAll、removeAll、contains、toArray()等,这些实现只是基本的实现,子类中有更有效率的就会覆盖它。典型的可见后面的Arraylist的toArray()。

public void clear() {
    Iterator<E> e = iterator();
    while (e.hasNext()) {
        e.next();
        e.remove();
    }
    }

List

List接口表示数据结构中的链表,其继承collection接口,又往里面添加了一些链表操作的方法,主要是随机访问、删除、查找、专用的迭代器等,如下所示:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值