资讯专栏INFORMATION COLUMN

ArrayList的实现

simon_chen / 1033人阅读

package com.nasuf.arraylist;

import java.util.Iterator;
import java.util.NoSuchElementException;

public class MyArrayList implements Iterable {
    
    private static final int DEFAULT_CAPICITY = 10;
    
    private int theSize;
    private AnyType[] theItems;
    
    public MyArrayList() {
        clear();
    }
    
    public void clear() {
        theSize = 0;
        ensureCapacity(DEFAULT_CAPICITY);
    }
    
    public int size() {
        return theSize;
    }
    
    public boolean isEmpty() {
        return size() == 0;
    }
    
    public void trimToSize() {
        ensureCapacity(size());
    }
    
    public AnyType get(int idx) {
        if (idx < 0 || idx >= size()) 
            throw new ArrayIndexOutOfBoundsException();
        return theItems[idx];
    }
    
    public AnyType set(int idx, AnyType newVal) {
        if (idx < 0 || idx >= size()) 
            throw new ArrayIndexOutOfBoundsException();
        AnyType old = theItems[idx];
        theItems[idx] = newVal;
        return old;
    }

    public void ensureCapacity(int newCapacity) {
        if (newCapacity < theSize)
            return;
        AnyType [] old = theItems;
        theItems = (AnyType []) new Object[ newCapacity ];
        for (int i=0; iidx; i--)
            theItems[i] = theItems[i=1];
        theItems[idx] = x;
        theSize ++;
    }
    
    public AnyType remove(int idx) {
        AnyType removedItem = theItems[idx];
        for(int i=idx; i iterator() {
        return new ArrayListIterator();
    }
    
    private class ArrayListIterator implements Iterator {

        private int current = 0;
        
        @Override
        public boolean hasNext() {
            return current < size();
        }

        @Override
        public AnyType next() {
            if (!hasNext()) 
                throw new NoSuchElementException();
            return theItems[current++];
        }
        
        public void remove() {
            MyArrayList.this.remove(--current);
        }
        
    }

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67382.html

相关文章

  • Java集合源码分析系列-(一)ArrayList源码剖析

    摘要:需要注意的是,通过构造函数定义初始量是动态数组的实际大小。带容量的构造函数新建一个容量为的数组默认构造函数,默认为空构造一个包含指定元素的第一个构造方法使用提供的来初始化数组的大小。 前言 今天介绍经常使用的一个Java集合类——ArrayList(基于JDK1.8.0_121)。ArrayList在工作和日常面试中经常被使用或者提到。总的来说,工作中使用ArrayList主要是因为动...

    Miyang 评论0 收藏0
  • Java集合之ArrayList源码解析

    摘要:数组的大小会根据容量的增长而动态的增长,具体的增长方式请看这里构造函数提供了三种方式的构造器。这些元素按照该的迭代器返回的顺序排列的。 原文地址 ArrayList ArrayList是List接口的 可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。ArrayList继承自 A...

    W4n9Hu1 评论0 收藏0
  • ArrayList源码分析

    摘要:表明该类具有序列化功能。关键属性默认初始容量大小指定该容量为时,返回该空数组。构造一个包含指定的元素的列表,这些元素是按照该的迭代器返回它们的顺序排列的。对扩容后的容量进行判断,如果大于允许的最大容量,则将容量再次调整为。 总览 showImg(https://segmentfault.com/img/bVbsm9v?w=1232&h=643); 底层:ArrayList底层是一个数...

    boredream 评论0 收藏0
  • 集合框架源码学习之ArrayList

    摘要:用户自己指定容量创建大小的数组创建空数组默认构造函数,其默认初始容量为构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。以正确的顺序返回该列表中的元素的迭代器。此方法充当基于阵列和基于集合的之间的桥梁。 目录: 0-0-1. 前言 0-0-2. 集合框架知识回顾 0-0-3. ArrayList简介 0-0-4. ArrayList核心源码 0-0-5. Ar...

    BLUE 评论0 收藏0
  • Week 2 - Java 容器 - 详细剖析 List 之 ArrayList, Vector,

    摘要:底层使用的是双向链表数据结构之前为循环链表,取消了循环。快速随机访问就是通过元素的序号快速获取元素对象对应于方法。而接口就是用来标识该类支持快速随机访问。仅仅是起标识作用。,中文名为双端队列。不同的是,是线程安全的,内部使用了进行同步。 前言 学习情况记录 时间:week 2 SMART子目标 :Java 容器 记录在学习Java容器 知识点中,关于List的需要重点记录的知识点。...

    MartinDai 评论0 收藏0

发表评论

0条评论

simon_chen

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<