手动实现ArrayList
来源:互联网 发布:阿里移动推荐算法代码 编辑:程序博客网 时间:2024/06/13 00:20
当我们创建一个数组对象的时候 必须要明确空间大小
ArrayList底层基于Object[]实现的
其实我们可以再创建ArrayList对象的时候 明确底层
开辟多大的数组对象 再构造方法里面传参数
参数:表示底层数组对象开辟多大空间
ArrayList底层基于Object[]实现的
其实我们可以再创建ArrayList对象的时候 明确底层
开辟多大的数组对象 再构造方法里面传参数
参数:表示底层数组对象开辟多大空间
当我们调用无参构造方法的时候 底层默认开辟10块内存空间
但是不代表只能装10个元素
但是不代表只能装10个元素
集合会自动扩容:
jdk6.0及之前 x*3/2+1 ->10 -> 16 -> 25....
jdk7.0及之后 x+(x>>1)->10 -> 15 -> 22...
jdk6.0及之前 x*3/2+1 ->10 -> 16 -> 25....
jdk7.0及之后 x+(x>>1)->10 -> 15 -> 22...
但是再开发的时候 尽量避免扩容:
1:创建新的数组对象
2:将老数组里面的元素复制进新数组里面
3:改变引用指向
4:回收老数组对象
5:继续添加元素
1:创建新的数组对象
2:将老数组里面的元素复制进新数组里面
3:改变引用指向
4:回收老数组对象
5:继续添加元素
/ArrayList
//属性:data size
//构造方法:有参 无参
//普通方法:
//size()
//get()
//add()
//remove()
//remove()
//contains()
//toString()
//trimToSize()
//ensureCapacity()
//属性:data size
//构造方法:有参 无参
//普通方法:
//size()
//get()
//add()
//remove()
//remove()
//contains()
//toString()
//trimToSize()
//ensureCapacity()
import java.util.*;public class TestArrayList8Plus{public static void main(String[] args){AList<Integer> list = new AList<Integer>();list.add(45);list.add(77);list.add(666);//Collections.addAll(list,56,77,90);System.out.println(list.size());System.out.println(list.get(2));System.out.println(list.contains(45));System.out.println(list);}}class AList<E>{//属性:private Object[] data;private int size;//构造方法public AList(int x){data = new Object[x];}public AList(){//[]:10data = new Object[10];}//方法://int x = list.size();public int size(){return size;//0}//Object obj = list.get(int x);public Object get(int x){return data[x];}//void -> list.add(Object obj);public void add(E obj){if(data.length == size){Object[] temp = new Object[size + (size >> 1)];//nullSystem.arraycopy(data,0,temp,0,size);data = temp;data[size] = obj;size++;}else{data[size] = obj;size++;}}//void -> list.remove(3);public void remove(int x){System.arraycopy(data,x+1,data,x,size-(x+1));size --;}public void remove(Object obj){//[]:10 -> 2for(int x = 0;x < size;x++){if(obj.equals(data[x])){remove(x);break;}}}//list.contains(元素)public boolean contains(Object obj){//obj调用equals方法和集合里面的每一个元素作比较//张三 李四 王五//list.contains("李四")for(int x = 0;x < size;x++){//10->2if(obj.equals(data[x])){return true;}}return false;}public void ensureCapacity(int x){if(x <= data.length){System.out.println("已经确保有" + x + "块容量");}else{Object[] temp = new Object[x];System.arraycopy(data,0,temp,0,size);data = temp;}}public void trimToSize(){Object[] temp = new Object[size];System.arraycopy(data,0,temp,0,size);data = temp;}@Overridepublic String toString(){//[元素1,元素2,元素3]StringBuffer buffer = new StringBuffer("[");for(int x = 0;x < size;x++){//x -> 下标//data[x] -> 元素buffer.append(data[x]);if(x != size - 1){buffer.append(",");}}buffer.append("]");return buffer.toString();}}
阅读全文
0 0
- 手动实现ArrayList
- Java手动实现简单 ArrayList
- 手动实现简单的ArrayList底层
- ArrayList实现
- ArrayList实现
- 实现ArrayList
- ArrayList实现
- 手动实现Vector
- 单链表的手动实现
- 手动实现DataTable。
- 实现手动画线
- 手动实现Gridview分页
- 手动实现智能指针
- 手动实现strncmp
- 手动实现mybatis generator
- 手动实现IOC容器
- 手动实现NSNotificationCenter功能
- 自己手动实现KVO
- 剑指offer——1.二维数组中的查找
- CSU 1562 Fun House
- HDU 6064 RXD and numbers BEST theorem
- POJ1088滑雪问题 简单dp(动态规划)已AC
- Jquery简介
- 手动实现ArrayList
- stm32笔记 keil5警告: declared implicitly
- POJ 2154 Color Polya(Polya定理+欧拉函数)
- **解析各类xml为map工具类**
- maven仓库网址
- win10下Visual Studio 2015,C++ x64编译zlib
- linux下搭建基本Java环境
- 求在多边形中画一个圆的最大半径
- C++二维数组