PoeticalJustice

导航

练习:自己写一个容器ArrayList集合 一一数组综合练习

  1 package cn.bjsxt.myCollection;
  2 
  3 import java.util.Arrays;
  4 
  5 /**
  6  * 天下文章一大抄,看你会抄不会抄。
  7  * 模拟Stringbuilder 写一个容器
  8  * 参照源码
  9  * 
 10  * 
 11  * @author Administrator
 12  *
 13  */
 14 public class MyArrayList {
 15     /**
 16      * The value is used for  object storage.
 17      */
 18     private Object[]value;
 19 
 20     /** 
 21      * The size is the number of characters used.
 22      */
 23     private int size;
 24     
 25     //查看size大小
 26     public int size(){
 27         return size;
 28     }
 29     //是否是空
 30     public boolean isEmpty(){
 31         return size==0;
 32     }
 33     
 34  //构造器
 35     public MyArrayList(){
 36         //value = new Object[16];
 37         this(10);
 38     }
 39     
 40     
 41     public MyArrayList(int size){
 42         if(size<0){
 43             
 44             try {
 45                 throw new Exception();
 46             } catch (Exception e) {
 47                 
 48                 e.printStackTrace();
 49             }
 50         }
 51         
 52         value = new Object[size];
 53     }
 54  
 55     //取出对象的方法 
 56     public Object get(int index) {
 57 //        //index范围[0,size-1]或者[0,index)一样
 58 //        if(index<0||index>size-1){
 59 //            
 60 //            try {
 61 //                throw new Exception();
 62 //            } catch (Exception e) {
 63 //                
 64 //                e.printStackTrace();
 65 //            }
 66 //            
 67 //        }
 68         rangeCheck(index);
 69         return value[index];
 70     }   
 71     
 72     //set
 73     public Object set(int index,Object object){
 74         //碰到 索引 都要判断    把下面代码封装成方法
 75 //           //index范围[0,size-1]或者[0,index)一样
 76 //        if(index<0||index>size-1){
 77 //            
 78 //            try {
 79 //                throw new Exception();
 80 //            } catch (Exception e) {
 81 //                
 82 //                e.printStackTrace();
 83 //            }
 84 //            
 85 //        }
 86         rangeCheck(index);
 87         Object old = value[index];
 88         value[index] = object;
 89         return old;
 90     }
 91     public  void rangeCheck(int index){
 92            //index范围[0,size-1]或者[0,index)一样
 93         if(index<0||index>size-1){
 94             
 95             try {
 96                 throw new Exception();
 97             } catch (Exception e) {
 98                 
 99                 e.printStackTrace();
100             }
101             
102         }
103     }
104     
105     //添加方法
106     public void add(Object obj){
107         value[size]=obj;
108         size++;
109         if(size>=value.length){
110             //装不下了 扩容吧
111             int newCapacity = value.length*2+1;
112             Object[]newList = new Object[newCapacity];
113             
114             //System.arraycopy(src, srcPos, dest, destPos, length);
115             
116             for(int i=0;i<value.length;i++){
117                 newList[i] = value[i];
118             }
119             value = newList;
120         }
121     }
122     
123     
124     
125     //查某个对象的下标值
126     public int indexOf(Object obj){
127         if(obj==null){
128             return -1;
129         }else{
130             for(int i=0;i<value.length;i++){
131                 if(obj==value[i]){
132                     return i;
133                 }
134             }
135             return -1;
136         }
137     }
138     //倒着第一次出现某个对象的下标值
139     public int lastIndexOf(Object obj){
140         if(obj==null){
141             return -1;
142         }else{
143             for(int i=value.length-1;i>=0;i--){
144                 if(obj==value[i]){
145                     return i;
146             }
147         }
148             return -1;
149     }
150 }  
151 
152     public static void main(String[] args) {
153         MyArrayList list = new MyArrayList(2);
154         list.add("aaa");
155         list.add(new Human("小高"));
156         list.add("bbb");
157         
158         Human h=(Human)list.get(1);
159         
160         System.out.println(list.get(1));
161         System.out.println(h.getName());
162         /**
163         *上面创建3个对象  你查第四个 不存在的
164         *System.out.println(list.get(3));
165         *越界异常
166         *java.lang.Exception
167         *    at cn.bjsxt.myCollection.MyArrayList.get(MyArrayList.java:62)             
168         *    at cn.bjsxt.myCollection.MyArrayList.main(MyArrayList.java:82)
169         */
170         System.out.println(list.size());
171     }
172     
173     
174 }

 

posted on 2017-10-04 16:53  PoeticalJustice  阅读(403)  评论(0编辑  收藏  举报