基于Object/数组模拟实现ArrayList的增、删、改、查
来源:互联网 发布:mac os x 升级系统 编辑:程序博客网 时间:2024/06/08 17:21
1、定义了一个DataList接口,里面包含了所需要实现的方法
2、用MyArrayList实现DataList接口,实现里面所定义的方法
3、扩容的核心思想:可以实现动态扩容,当检测到数组容量不够时,自动扩大为原来的1.5倍,扩容的核心思想是将旧数组copy到新数组,再将新数组赋值给当前数组。
4、实现代码如下:
package arrayList;/** * 线性表接口 * @author tiger */public interface DataList{void add(Object obj);boolean add(int index,Object obj);boolean remove(int index);boolean set(int index,Object obj);Object get(int index);int size();}package arrayList;import java.util.Arrays;/** * 基于数组实现 * @author tiger * */class MyArrayList implements DataList{private final static int INIT_SIZE = 5;private Object[] ary = new Object[INIT_SIZE];//初始化数组个数private int size = 0;//记录实际元素个数public MyArrayList() { }/* * 数组元素的添加 */@Overridepublic void add(Object obj) {//判断是否需要扩容if (size + 1 > ary.length) {//对数组进行扩容ensureCapacity();}ary[size] = obj;size ++;}/* * 数组元素的插入 */@Overridepublic boolean add(int index, Object obj) {//判断是否需要扩容if (size + 1 > ary.length) {ensureCapacity();//执行扩容操作}if (index < size){//向右边移动一位for (int i = size - 1; i >=index; i--) {ary[i+1] = ary[i];}}ary[index] = obj;//将元素插入指定index位置size ++;return true;}@Overridepublic boolean remove(int index) {if (index >= size) {System.out.println("--index不存在--");return false;}//向左移一位for (int i = index; i < size; i++) {ary[i] = ary[i+1];}ary[size] = null;size --;return true;}@Overridepublic boolean set(int index, Object obj) {ary[index] = obj;return true;}@Overridepublic Object get(int index) {return ary[index];}@Overridepublic int size() {return this.size;}@Overridepublic String toString() {return "{ary=" + Arrays.toString(ary) + "}";}/* * 实现对数组的扩容 * 核心思想:创建一个容量更大的新数组替换容量不够的旧数组。 */private void ensureCapacity(){Object[] newArray = new Object[ary.length + (ary.length >> 1)];//容量为原来的1.5倍//将旧数组复制迁移到新数组//System.out.println("新数组大小为" + (ary.length + (ary.length >> 1)));for (int i = 0,j = 0; i < ary.length; i++,j++) {newArray[j] = ary[i];}//将新数组指向原来的this.ary = newArray;}}package arrayList;import java.util.ArrayList;import java.util.List;@SuppressWarnings("all")public class MyArrayListTest {public static void main(String[] args) {DataList myArraylist = new MyArrayList();myArraylist.add("today");myArraylist.add("is");myArraylist.add("a");myArraylist.add("nice");myArraylist.add("day!");myArraylist.add("How");myArraylist.add("do");myArraylist.add("you");System.out.println("添加元素 : "+myArraylist);myArraylist.remove(myArraylist.size() - 1);System.out.println("移除指定所有处的值 : "+myArraylist);System.out.println("取得指定所有处的值 : "+myArraylist.get(1));myArraylist.set(1, "tiger");System.out.println("修改之后的 : "+myArraylist);}}
阅读全文
1 0
- 基于Object/数组模拟实现ArrayList的增、删、改、查
- ArrayList模拟数据库的增删改查
- ArrayList的增 删 改 查
- 基于easyui的 增 删 改 查
- 数组的 增 删 改 查
- 数组的增、删、改、查
- 模拟实现string的增删查改
- 散列表的C程序实现,基于数组实现可以实现增删改查操作,
- java实现数组的增删改查
- JSP实现数据库的增、删、改、查、分页查
- JAVA采用数组结构实现一个线性表,可以增删改查,类似于ArrayList
- 基于数组的ArrayList
- js数组的管理[增,删,改,查]
- swift(三) 数组的简单操作 (增 删 改 查)
- js数组的管理[增,删,改,查]
- 模拟实现string类的增删查改
- 数组进行增、删、查、改
- NSMutableArray (可变数组增、删、改、查)
- 菜鸟先飞之JAVA_标识符的命名规则
- 算法学习之路
- 1013. 数素数
- python学习日志--day10
- Opencv车牌识别之字符提取
- 基于Object/数组模拟实现ArrayList的增、删、改、查
- Linux命令行阅读、统计、检索、(解)压缩、查找(二)
- wireshark使用
- 概率论——大数定律及中心极限定理
- Eclipse 转 AndroidStudio 的两种方式(详细图文说明)
- 嵌入式代码的编译、下载、执行
- 最大报销额
- MFC对话框里利用CHtmlView加载界面(三)————JaveScript 调用 MFC
- C 语言包含的数据类型如下图所示: