/**
* 顺序表,重点是数组动态扩容,插入
* 底层采用数组,长度可以动态变化,此处采用增长一倍,而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);
}
}

最新文章

  1. oracle10g冷备份和恢复过程记录
  2. Ubuntu下输入su - [root]后提示“su:认证失败”
  3. P38、面试题3:二维数组中的查找
  4. .net mvc 发布部署到机器上
  5. BZOJ1621: [Usaco2008 Open]Roads Around The Farm分岔路口
  6. js 联系电话验证实现
  7. Web Services 介绍
  8. nodejs使用connect-mongodb报错(Please ensure that you set the default write concern)
  9. APP模板框架
  10. LeetCode(192. Word Frequency)
  11. adapter.notifydatasetchanged()没有效果
  12. BMFont制作美术字体
  13. 获取目录文件.bat
  14. sublime text3 批量查找替换文件夹或项目中的字符
  15. snakemake使用笔记
  16. css基础 -文本溢出 text-overflow:ellipsis;
  17. codeforces水题100道 第十九题 Codeforces Round #109 (Div. 2) A. I_love_%username% (brute force)
  18. confirm(message)
  19. vue开发 ES5——&gt; ES6设置
  20. linux自启动、定时启动脚本

热门文章

  1. js/jquery加入的select value显示不正确问题
  2. 题解【UVA10054】The Necklace
  3. Django_类视图
  4. vue 使用 jsonp 请求数据
  5. 扩展欧几里得求解同余方程(poj 1061)
  6. css的多级分类
  7. 静态方法使用synchronized修饰.
  8. 记一次使用正则表达式+foreach控制器调试
  9. opencv:图像轮廓计算
  10. vue项目怎么搭建到云服务器上