文档章节

基本数据结构之ArrayList

关西大汉弹琵琶
 关西大汉弹琵琶
发布于 2015/10/12 20:08
字数 313
阅读 21
收藏 0

问题描述: 

ArrayList


问题分析: 

基本的实现


代码实现:

package c03;

import java.util.Iterator;
import static self.util.*;
/*
*
 * @project: DataStructureAndAlgorithmAnalysis
 * @filename: MyArrayList.java
 * @version: 0.10
 * @author: Jimmy Han
 * @date: 21:40 2015/7/13
 * @comment: List implemented with Array
 * @result:
*/

public class MyArrayList<AnyType> implements Iterable<AnyType> {
    private static final int DEFAULT_CAPACITY = 10;
    private int theSize;
    private AnyType[] theItems;

    public MyArrayList(){doClear();}
    public void clear(){doClear();}
    private void doClear(){
        theSize = 0; ensureCapacity(DEFAULT_CAPACITY);
    }

    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; i < size(); i++)
            theItems[i] = old[i];
    }

    public boolean add(AnyType x){
        add(size(), x);
        return true;
    }

    public void add(int idx, AnyType x){
        if(theItems.length == size())
            ensureCapacity(size()*2 + 1);
        for(int i = theSize; i > idx; i--)
            theItems[i] = theItems[i - 1];
        theItems[idx] = x;

        theSize++;
    }

    public AnyType remove(int idx){
        AnyType removeItem = theItems[idx];
        for(int i = idx; i < size() - 1; i++)
            theItems[i] = theItems[i + 1];
        theSize--;
        return removeItem;
    }

    public Iterator<AnyType> iterator() {
        return new ArrayListIterator();
    }

    private class ArrayListIterator implements java.util.Iterator<AnyType>{
        private int current = 0;

        public boolean hasNext(){
            return current < size();
        }

        public AnyType next(){
            if(!hasNext())
                throw new java.util.NoSuchElementException();
            return theItems[current++];
        }

        public void remove(){
            MyArrayList.this.remove(--current);
        }
    }

    public static void main(String[] args) {
        MyArrayList<String> marr = new MyArrayList<String>();
        marr.add("www");
        marr.add("bw");
        marr.add(".com");
        marr.add("s");
        marr.remove(3);
        marr.add(".cn");

        self.util.printIterator(marr.iterator());

        System.out.println(marr.get(2));
        System.out.println(marr.set(1,"hello"));

       self.util.printIterator(marr.iterator());

    }
}


© 著作权归作者所有

共有 人打赏支持
关西大汉弹琵琶
粉丝 7
博文 41
码字总数 14221
作品 0
浦东
程序员
私信 提问
JDK源码阅读ArrayList

ArrayList的具体实现 ArrayList是List接口的具体实现,是在实际生产环境中用的非常多的一种工具类 数据结构 顾名思义,从ArrayList的名字中我们就可以看出,ArrayList是基于数组的一种实现. 主要...

le284
2015/02/13
0
0
集合(二):List接口。

一:List接口: 继承自Collection,如下: 1.ArrayList( 实现类): ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了L...

牧羊人Berg
2016/05/25
100
0
Vector、ArrayList、LinkList集合框架的使用与理解

说起集合框架也是老生常谈的话题,也是面试过程中面试官高频率问到的基础知识,新人在学习集合框架的时候总是会经常混淆这些概念和各自特性,这里简单对常用的几种集合做个简单总结,如有疏漏...

<E>, <E>, <E>
09/25
0
0
Java集合族谱总结

集合族谱核心成员 集合族谱核心成员 所有的集合类,都实现了Iterator接口,这是用于遍历集合中元素的接口;Java集合框架核心是两个类型的容器,一种是集合(Collection),存储单一元素,一种...

翻滚吧李博
2017/12/19
0
0
Java 基础(四)集合源码解析 List

List 接口 前面我们学习了Iterator、Collection,为集合的学习打下了基础,现在我们来学习集合的第一大体系 List。 List 是一个接口,定义了一组元素是有序的、可重复的集合。 List 继承自 ...

diamond_lin
2017/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Eureka Server启用 https服务指北

文章共 591字,阅读大约需要 2分钟 ! 概 述 在我的前文《Eureka Server 开启Spring Security Basic认证》中已经给 Eureka Server 开启了最基本的鉴权措施,本文则让 HTTPS加持于 Eureka Ser...

CodeSheep
23分钟前
2
0
OSChina 周二乱弹 —— 其实我在地板也睡不着

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @witt-z :分享歌词: 阴天 在不开灯的房间,当所有思绪都一点一点沉淀。 分享莫文蔚的单曲《阴天》: 《阴天》- 莫文蔚 手机党少年们想听歌,...

小小编辑
45分钟前
106
5
微服务分布式事务实现

https://www.processon.com/view/link/5b2144d7e4b001a14d3d2d30

WALK_MAN
今天
3
0
《大漠烟尘》读书笔记及读后感文章3700字

《大漠烟尘》读书笔记及读后感文章3700字: 在这个浮躁的社会里,你有多久没有好好读完一本书了? 我们总觉得自己和别人不一样,所以当看到别人身上的问题时,很少有“反求诸己”,反思自己。...

原创小博客
今天
4
0
大数据教程(9.5)用MR实现sql中的jion逻辑

上一篇博客讲解了使用jar -jar的方式来运行提交MR程序,以及通过修改YarnRunner的源码来实现MR的windows开发环境提交到集群的方式。本篇博主将分享sql中常见的join操作。 一、需求 订单数据表...

em_aaron
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部