实现简单arrayList

/**

* 实现arrayList

* 53页

* @author zj

*

* @param <T>

*/

public class MyArrayList<T> implements Iterable<T> {

private static final int DEFAULT_CAPACITY = 10;

/*

* 大小及数组作为数据成员进行存储

*/

private int theSize;

private T[] theItems;

public MyArrayList(){

clear();

}

private void clear() {

// TODO Auto-generated method stub

theSize = 0;

ensureCapacity(DEFAULT_CAPACITY);

}

/**

* 容量扩充

* @param newCapacity

*/

private void ensureCapacity(int newCapacity) {

// TODO Auto-generated method stub

if(newCapacity < theSize)return;

T[] old = theItems;

theItems = (T[]) new Object[newCapacity];

for(int i = 0;i<size();i++){

theItems[i] = old[i];

}

}

private int size() {

// TODO Auto-generated method stub

return theSize;

}

public void trimToSize(){

ensureCapacity(size());

}

public boolean isEmpty(){

return size() == 0;

}

public T  get(int idx){

if(idx < 0 || idx >= size())

throw new ArrayIndexOutOfBoundsException();

return theItems[idx];

}

public T set(int idx , T newVal){

if(idx < 0 || idx >=size())

throw new ArrayIndexOutOfBoundsException();

T old = theItems[idx];

theItems[idx] = newVal;

return old;

}

public  boolean add(T x){

add(size(),x);

return true;

}

private void add(int idx, T x) {

// TODO Auto-generated method stub

if(theItems.length == size())

ensureCapacity(size()*2+1);

for( int i = theSize;i>idx;i--){//如果不是末端add,在插入位置依次往后移位

theItems[i] = theItems[i-1];

}

theItems[idx] = x;

theSize++;

}

public T remove(int idx){

T removedItem = theItems[idx];

for(int i = idx;i<size()-1;i++){

theItems[i] = theItems[i+1];

}

theSize--;

return removedItem;

}

@Override

public Iterator<T> iterator() {

// TODO Auto-generated method stub

return  new ArrayListIterator();

}

private class ArrayListIterator implements java.util.Iterator<T>{

private int current = 0;

@Override

public boolean hasNext() {

// TODO Auto-generated method stub

return current < size();

}

@Override

public T next() {

// TODO Auto-generated method stub

if(!hasNext())

throw new java.util.NoSuchElementException();

return theItems[current++];

}

@Override

public void remove() {

// TODO Auto-generated method stub

MyArrayList.this.remove(--current);

}

}

public static void main(String[] args) {

MyArrayList<Integer> ma = new MyArrayList<Integer>();

ma.add(1);

ma.add(2);

}

}

时间: 2024-10-26 18:54:04

实现简单arrayList的相关文章

list,set,map总结

学习了集合,脑子里list,set,map之间的关系有混乱,在这里整理一下.有兴趣的朋友可以看下. 先看下 list,set,map各自的特点 List:     索引数组:在内存空间上是连续的,计数也是连续的,总体就是有序的.下标是从0开始的,挨个递增的数组,可以通过数字下标找到相应的元素   关联数组:在内存空间上是连续的,计数不是连续的,就是无序的.下标是字符串的数组,可以通过下标这个字符串去找相对应的元素    ArrayList():        List接口的大小可变数组的实现.实

C#中数组与ArrayList的简单使用

1. 多维数组 2. 锯齿数组 3. 数组的常用操作 4. ArrayList 1. 多维数组 多维数组:行数和列数在定义时已确定 string[,] arr = new string[2, 3]; arr[0, 0] = "坐标:1-1"; arr[0, 1] = "坐标:1-2"; arr[0, 2] = "坐标:1-3"; arr[1, 0] = "坐标:2-1"; arr[1, 1] = "坐标:2-2&qu

容器_JDK源码分析_自己简单实现ArrayList容器

这几天仔细研究下关于ArrayList容器的jdk源码,感觉收获颇多,以前自己只知道用它,但它里面具体是怎样实现的就完全不清楚了.于是自己尝试模拟写下java的ArrayList容器,简单了实现的ArrayList类中几个方法,当然这仅仅只是加深对容器的理解,因此希望我的分享也能够给大家带来帮助. 一.AyyayList到底是什么? 其实ArrayList就是一个java中的一个类而已,说起来没什么复杂的,好,既然是类,是不是就有成员属性和成员方法.点击查看ArrayList的outline,来

Java的动态数组:ArrayList的简单运用(增删改查)

小伙伴们!今天做个笔记分享给大家!这个是我创建的QQ交流群:315677448感兴趣的欢迎你的加入.废话不多说直接进入今天的主体 ArrayList就是传说中的动态数组! 咱们创建一个Test类,具体代码如下: package Case0000014; import java.util.ArrayList; public class test {     public static void main(String[] args) {         ArrayList lis = new Ar

利用ArrayList实现简单的管理系统

package com.homework.demo_4;/* * 1.定义一个接口,让其实现类实现它的所以得方法,同时限制类的实现 * 2.查询新闻 * 3.添加新闻 * 4.删除新闻 * */public interface INewsInfo { //查询新闻,根据新闻编号查找 public abstract void findNews(String newsId); //添加新闻 public abstract void addNews(NewsInfo news); //删除新闻 pub

Java中SJBArrayList自己简单实现ArrayList

/** * 自己实现ArrayList * @author zyyt * */ public class SJBArrayList { //存放SJBArrayList中的元素 transient Object[] elementData; //SJBArrayList中含有多少个元素 private int size; //构造方法 public SJBArrayList(){ this(10); } public SJBArrayList(int initialCapacity) {   /

ArrayList的简单练习

public static void getList()        {             //写一个长度为10 的集合,要求里面存放10个随机数(0-9)            //要求数字不能重复            Random rd = new Random();            ArrayList list = new ArrayList();            for (int i = 0; i < 10; i++)            {           

简单Struct+ArrayList选择买东西:购物车思路

namespace ConsoleApplication30 { class Program { struct buy { public string name; public double prc; public int shul; } static void Main(string[] args) { ArrayList al = new ArrayList(); double sum = 0; while (true) { buy b = new buy(); Console.Write(

ArrayList和 LinkedList简单遍历

1 package Arraylist; 2 3 import java.util.List; 4 import java.util.ArrayList; 5 import java.util.LinkedList; 6 7 public class Test { 8 public static void main(String[] args) { 9 Dog dog1=new Dog("mijia",1); 10 Dog dog2=new Dog("q",2);