三 模拟实现顺序表ArrayList
2024-09-06 06:31:19
/**
* 顺序表,重点是数组动态扩容,插入
* 底层采用数组,长度可以动态变化,此处采用增长一倍,而java.util.ArrayList每次增长50%
* int newCapacity = oldCapacity + (oldCapacity >> 1);
*
*/
public class ArrayList implements List{
private Object[] elementData;//底层数组
private int size;//元素个数 public ArrayList(int initialCapacity) {
//给数组分配指定数量空间
elementData = new Object[initialCapacity];
//指定顺序表元素个数,默认是0
//size = 0;
} public ArrayList() {
//没有指定长度,默认initialCapacity是4
this(4);
//没有指定长度,长度是0
// elementData = new Object[]{};
} @Override
public int size() {
// TODO Auto-generated method stub
return size;
} @Override
public Object get(int i) {
if(i<0||i>size-1){
throw new RuntimeException("数组指针越界:"+i);
}
return elementData[i];
} @Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return size == 0;
} @Override
public boolean contains(Object e) {
// TODO Auto-generated method stub
return false;
} @Override
public int indexOf(Object e) {
// TODO Auto-generated method stub
return 0;
} @Override
public void add(int i, Object e) {
if(i<0||i>size){
throw new RuntimeException("数组指针越界异常:"+i);
}
if(size == elementData.length)
{
grow();
}
for(int j =size ; j>i ; j--){
elementData[j] = elementData[j-1];
}
elementData[i] = e;
size++; } @Override
public void add(Object e) { this.add(size, e);
// //动态扩容
// if(size == elementData.length)
// {
// grow();
// } // elementData[size] = e;
// size++;
// //System.out.println("length="+elementData.length);
} public void grow(){
// Object[] newArr = new Object[size*2];
// for(int i = 0; i<size;i++){
// newArr[i] = elementData[i];
// }
// elementData = newArr;
elementData = Arrays.copyOf(elementData, elementData.length*2);
}
}
最新文章
- oracle10g冷备份和恢复过程记录
- Ubuntu下输入su - [root]后提示“su:认证失败”
- P38、面试题3:二维数组中的查找
- .net mvc 发布部署到机器上
- BZOJ1621: [Usaco2008 Open]Roads Around The Farm分岔路口
- js 联系电话验证实现
- Web Services 介绍
- nodejs使用connect-mongodb报错(Please ensure that you set the default write concern)
- APP模板框架
- LeetCode(192. Word Frequency)
- adapter.notifydatasetchanged()没有效果
- BMFont制作美术字体
- 获取目录文件.bat
- sublime text3 批量查找替换文件夹或项目中的字符
- snakemake使用笔记
- css基础 -文本溢出 text-overflow:ellipsis;
- codeforces水题100道 第十九题 Codeforces Round #109 (Div. 2) A. I_love_%username% (brute force)
- confirm(message)
- vue开发 ES5——>; ES6设置
- linux自启动、定时启动脚本