java ArrayList集合类的书写

原创 2016年08月30日 12:40:24

java中的ArrayList的书写还是比较容易些的,所以就写了一遍

import java.util.Arrays;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.NoSuchElementException;

public class ArrayListsw {
    private int capacity=2;
    private Object [] a=new Object[capacity];
    private int size=0;
    /**
     * 得到主存储数组a 
     * @return a数组
     */
    public Object[] getA() {
        return a;
    }
    /**
     * 总元素的长度
     * @return size
     */
    public int getSize() {
        return size;
    }

    public ArrayListsw(int capacity){
        this.capacity=capacity;
        a=new Object[capacity];
    }

    public ArrayListsw(){

    }

    /**
     * 
     * @param ob
     * 增加ArrayListsw里的元素,利用grow函数达到不会越界的效果
     */
    public void add(Object ob){
        if(size>=capacity){
            this.grow();
        }
        a[size++]=ob;
    }

    /**
     * 
     * @param index
     * @param ob
     * 
     * 增加ArrayListsw里的元素,利用grow函数达到不会越界的效果
     */
    public void add(int index,Object ob){
        if(size>=capacity){
            this.grow();
        }
        Object [] b=new Object[capacity];
        System.arraycopy(a, index, b, 0, a.length-index);
        a[index]=ob;
        System.arraycopy(b, 0, a, index+1, a.length-index-1);
        size++;
    }

    /**
     * 
     * @param ArrayListsw b
     * 将b中所有的元素都放入this数组中
     */
    public void addAll(ArrayListsw b){
        while(size+b.getSize()>=capacity){
            this.grow();
        }
        System.arraycopy(b.getA(), 0, a, size, b.getSize());
        size+=b.getSize();
        //System.out.println(toString(b.a,b.getSize()));
    }

    /**
     * 从index开始的b中所有元素放入this的数组中
     * @param index
     * @param ArrayListsw b
     */
    public void addAll(int index,ArrayListsw b){
        while(size+b.getSize()-index>=capacity){
            this.grow();
        }
        System.arraycopy(b.getA(), index, a, size, b.getSize());
        size+=b.getSize()-index;
        //System.out.println(toString(b.a,b.getSize()));
    }

    /**
     * 将第index个元素删去
     * @param index
     */
    public void remove(int index){
        if(index>=size){
            throw new ArrayIndexOutOfBoundsException();
        }
        else{
            size--;
            Object [] b=new Object[capacity];
            System.arraycopy(a, index+1, b, 0, a.length-index-1);
            System.arraycopy(b, 0, a, index, a.length-index-1);
        }
    }

    /**
     * 将ArrayListsw中的ob元素删去
     * @param ob
     */
    public void remove(Object ob){
        for(int i=0;i<size;i++){
            if(a[i]==ob){
                remove(i);
            }
        }
    }

    /**
     * 将所有在b中的ArrayListsw删去
     * @param ArrayListsw b
     */
    public void removeAll(ArrayListsw b){
        for(int i=0;i<size;i++){
            for(int j=0;j<b.getSize();j++){
                if(a[i]==b.getA()[j]){
                    remove(i);
                }
            }
        }
    }

    /**
     * 将index处插入一个Object
     * @param index
     * @param ob
     * @return
     */
    public Object set(int index,Object ob){
        a[index]=ob;
        return ob;
    }

    /**
     * 获取index为下标的Object
     * @param index
     * @return
     */
    public Object get(int index){
        return a[index];
    }

    private void grow(){
        int oldcapacity=capacity;
        int newcapacity=oldcapacity+oldcapacity/2;
        Object [] b=new Object[capacity];
        b=a;
        a=new Object[newcapacity];
        System.arraycopy(b, 0, a, 0, b.length);
        capacity=newcapacity;
    }

    /**
     * 总元素的长度
     * @return size
     */
    public int size(){
        return size;
    }

    /**
     * 从start开始到end结束的所以元素打印出来
     * @param start
     * @param end
     * @return
     */
    public String subList(int start,int end){
        Object [] b=new Object[capacity];
        System.arraycopy(a, start, b, 0, end-start);
        return toString(b,end-start);
    }

    /**
     * 判断ob是否在a数组中
     * @param ob
     * @return
     */
    public boolean contain(Object ob){
        for(int i=0;i<size;i++){
            if(ob==a[i])
                return true;
        }
        return false;
    }

    /**
     * 将第一个ob的下标返回
     * @param ob
     * 如果 存在
     * @return 下标
     */
    public int indexOf(Object ob){
        for(int i=0;i<size;i++){
            if(a[i]==ob){
                return i;
            }
        }
        return -1;
    }

    /**
     * 从后往前,将第一个ob的下标返回
     * @param ob
     * 如果 存在
     * @return 下标
     */
    public int lastIndexOf(Object ob){
        for(int i=size-1;i>=0;i--){
            if(a[i]==ob){
                return i;
            }
        }
        return -1;
    }

    /**
     * 判断是否为空
     * @return
     */
    public boolean isEpmty(){
        if(size==0){
            return true;
        }
        return false;
    }

    /**
     * 迭代器
     * @return
     */
    public Iterator iterator() {
        return new Itr();
    }


    private class Itr implements Iterator {
        int cursor;      
        int lastRet = -1;

        public boolean hasNext() {
            return cursor != size;
        }

        public Object next() {
            int i = cursor;
            if (i >= size)
                throw new NoSuchElementException();
            Object[] elementData = a;
            if (i >= elementData.length)
                throw new ConcurrentModificationException();
            cursor = i + 1;
            return elementData[lastRet = i];
        }
    }


    /**
     * 初始化ArrayListsw里的元素
     */
    public void clear(){
        a=new Object[2];
        size=0;
        capacity=2;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + Arrays.hashCode(a);
        result = prime * result + capacity;
        result = prime * result + size;
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        ArrayListsw other = (ArrayListsw) obj;
        if (!Arrays.equals(a, other.a))
            return false;
        if (capacity != other.capacity)
            return false;
        if (size != other.size)
            return false;
        return true;
    }
    @Override
    public String toString() {
        String s="[";
        for(int i=0;i<size;i++){
            if(i==size-1){
                s+=a[i]+"]";
            }
            else{
                s+=a[i]+", ";
            }
        }
        return  s;
    }

    public String toString(Object a[],int size) {
        String s="[";
        for(int i=0;i<size;i++){
            if(i==size-1){
                s+=a[i]+"]";
            }
            else{
                s+=a[i]+", ";
            }
        }
        return  s;
    }
}

测试:

import java.util.Iterator;

public class TestArrayList {
    public static void main(String[] args) {
        ArrayListsw list=new ArrayListsw();
        ArrayListsw list2=new ArrayListsw();
        list2.add(1);
        list2.add(2);
        list2.add("x");
        list2.add('x');
        list2.add(true);
        list2.add(1.2);
        list.add(1,5);
        list.add(1);
        list.add(2);
        list.add(7);
        list.add(1, "x");
        list.add(2, "x");
        System.out.println(list.contain("x"));
        System.out.println(list.set(0,"yy"));
        System.out.println(list.subList(0, 2));
        System.out.println(list.get(0));
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
        System.out.println(list);
        list.remove(1);
        System.out.println(list);

        System.out.println(list2);
        list.addAll(list2);
        System.out.println(list);

        System.out.println(list.indexOf(5));
        System.out.println(list.lastIndexOf("x"));

        //list.removeAll(list2);

        Iterator  iter=list.iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }  
    }
}

结果:
这里写图片描述

测试的比较烂,随意看看

版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA集合类——难得的总结

文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41346969 以下资料是在学习中总结出来的,希望对你有所帮...
  • pistolove
  • pistolove
  • 2014年11月24日 21:27
  • 7859

Java集合类学习UML图——ArrayList

Java集合类学习UML图——ArrayList ArrayList类的定义 public class ArrayList extends AbstractList implement...
  • embedclub_LYF
  • embedclub_LYF
  • 2016年06月02日 20:27
  • 1024

有关Java集合类的10大问题

原文地址:Top 10 questions about Java Collections
  • snarlfuture
  • snarlfuture
  • 2013年12月05日 01:14
  • 1707

Java集合类详解

Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMa...
  • u014136713
  • u014136713
  • 2016年08月01日 21:09
  • 117842

Java 7之集合类型第6篇 - Set集合的实现

为了让大家了解 TreeMap 和 TreeSet 之间的关系,下面先看 TreeSet 类的部分源代码: public class TreeSet extends AbstractSet imple...
  • mazhimazh
  • mazhimazh
  • 2014年02月10日 09:51
  • 2235

java基础之集合框架——Collections-同步和非同步

首先研究下Collection下的同步和非同步,例如ArrayList     List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现List 接...
  • sanjiaozhen
  • sanjiaozhen
  • 2015年09月30日 01:51
  • 633

Java常用集合类及其区别

面试时时被集合类各种虐,现在就来总结一下Java的集合类及其区别。
  • zhj870975587
  • zhj870975587
  • 2016年03月28日 13:48
  • 4675

java进阶(三):反射(3)——数组的反射与集合的运用(ArrayList、HashSet)

一、数组的反射
  • u012228718
  • u012228718
  • 2014年09月03日 22:13
  • 1038

黑马程序员_Java(对象数组,集合Collection,集合list)

------- android培训、java培训、期待与您交流! ---------- 生活是一面镜子,照着别人,也照着自己 1:对象数组 (1)数组既可以存储基本数据类型,也可以存储引用类型。它存...
  • limingyuer
  • limingyuer
  • 2015年05月20日 23:53
  • 744

JAVA 集合 List 分组的两种方法

从网上找了两种方法,效率差不多,这里贴出代码供大家参考 实体类Data public class Data { private Long id ; private Long ...
  • yangxiaojun9238
  • yangxiaojun9238
  • 2016年05月25日 19:25
  • 12534
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java ArrayList集合类的书写
举报原因:
原因补充:

(最多只允许输入30个字)