ArrayList (容器)-----------(底层实现是数组)
ArrayList 底层实现
小示例(有点绕,理解了,你会进步一大截。学会看源码真的很重要)
Human.java
package cn.Mylist; public class Human { private String name; public Human(String name) { super(); this.name = name; } public String getName() { return name; } // public void setName(String name) { // this.name = name; // } }
MyArrayList.java
package cn.Mylist; /* * 模拟实现JDK中提供的的ArrayList类 * */ public class MyArrayList { private Object[] value; private int size=0; //定义容器; // public MyArrayList() { //// value=new Object[16]; // this(16); //这个构造器调下一个构造器; // } public MyArrayList(int m) { value=new Object[m]; }
public int size() { return size; } //给容器中放东西 public void add(Object o) { value[size]=o; size++; if(size>=value.length) { //装不下了,扩容吧! int Capacity=value.length*2+2; Object[] newlist=new Object[Capacity]; //要把老容器的值保留,把老容器的值拷入新容器; // System.arraycopy(value,0, newlist, 0, size); 第一种 for(int i=0;i<value.length;i++) { //第二种copy方式 newlist[i]=value[i]; } value=newlist; //将其赋给value,老数组value消失 } } //在容器中按照索引取东西; public Object get( int index) { return value[index]; } public static void main(String[] args) { MyArrayList mylist=new MyArrayList(2); mylist.add("haha"); mylist.add(new Human("sun")); mylist.add("sss"); mylist.add("ss"); Human h=(Human)mylist.get(1); //把Object对象强转 System.out.println(mylist.get(1)); System.out.println(h.getName()); System.out.println(mylist.size()); //查找里面的东西 } }
打印结果: