java用数组模拟实现ArrayList以及一些常用方法实现
来源:互联网 发布:数据库一致性 cap 编辑:程序博客网 时间:2024/06/01 09:28
package com.yys.student;/** * Created by yys on 2017/5/4. */public class SxtArrayList { private Object[] elementDate; private int size; /** * 默认无参构造方法 SxtArrayList() */ public SxtArrayList(){ this(10); } /** * 默认带参构造方法 SxtArrayList(int initialCapacity) */ public SxtArrayList(int initialCapacity){ if(initialCapacity<0){ try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } } elementDate = new Object[initialCapacity]; } /** * 返回list大小 size() * 返回SxtArrayList对象大小即SxtArrayList中数组大小 */ public int size(){ return size; } /** * 判断list是否为空 isEmpty() 此方法待改进 初始化时并未使用size 只有add时候用到size属性 直接判断size不正确 * 返回SxtArrayList对象是否为空即SxtArrayList中数组中是否有实际值 */ public boolean isEmpty(){ return size == 0; } /** * 新增对象 add(Object obj) * ensureCapacity()检查数组是否需要数组扩容和数据拷贝 后添加元素 * 返回 null */ public void add(Object obj){ //数组扩容和数据拷贝 ensureCapacity(); elementDate[size++] = obj; } /** * 指定位置新增对象 原来此位置对象后移 add(int index , Object object) * rangeCheck(index)检验数组下标是否越界 * ensureCapacity()检查数组是否需要数组扩容和数据拷贝 * 然后进行原来数组内容向后移动 * 最后把新值传入相应位置 * 数组长度++ * 返回 null */ public void add(int index , Object object){ //检验数组下标是否越界 rangeCheck(index); //数组扩容和数据拷贝 ensureCapacity(); //第一个是要复制的数组,第二个是从要复制的数组的第几个开始, //第三个是复制到那,四个是复制到的数组第几个开始,最后一个是复制长度 System.arraycopy(elementDate,index,elementDate,index+1 ,size-index); elementDate[index] = object; size++; } /** * 获取指定位置对象 get() * rangeCheck(index)检验数组下标是否越界 * 返回数组对应值(object) */ public Object get(int index){ rangeCheck(index); return elementDate[index]; } /** * 删除指定位置对象 remove(int index) * rangeCheck(index)检验数组下标是否越界 * 删除对象前计算出要删除的对象后面还剩多少对象以便于后面元素向前移动 * 移动对象 * 原数组最后一位设置为空 * 如果删除对象在数组最后一位则直接删除无需数组元素移动 * 返回 null */ public void remove(int index){ rangeCheck(index); int numMove = size - index -1; if(numMove > 0){ //第一个是要复制的数组,第二个是从要复制的数组的第几个开始, //第三个是复制到那,四个是复制到的数组第几个开始,最后一个是复制长度 System.arraycopy(elementDate,index +1,elementDate,index,numMove); elementDate[--size] = null; }else if(numMove == 0){ elementDate[--size] = null; } } /** * 重新设置指定位置对象 set(int index,Object object) * rangeCheck(index)检验数组下标是否越界 * 获取对应下标对象 暂定为旧对象 * 对应下标对象重新赋值 * 返回 旧对象 */ public Object set(int index,Object object){ rangeCheck(index); Object oldValue = elementDate[index]; elementDate[index] = object; return oldValue; } /** * 删除指定对象 remove(Object obj) * 判断传入对象是否存在 * 如果存在则会得到相应下标位置 * 利用下标位置删除此元素 * 返回 null */ public void remove(Object obj){ for(int i=0;i<size;i++){ if(get(i).equals(obj)){//底层是equls remove(i); } } } /** * 检验数组下标是否越界 */ private void rangeCheck(int index){ if(index<0 || index>=size){ try { throw new Exception("下标越界"); } catch (Exception e) { e.printStackTrace(); } } } /** * 数组扩容和数据拷贝 */ private void ensureCapacity(){ if(size==elementDate.length){ Object[] newArray = new Object[size*2+1]; System.arraycopy(elementDate,0,newArray,0,elementDate.length);// System.arraycopy()代替for循环// for(int i=0;i<elementDate.length;i++){// newArray[i] = elementDate[i];// } elementDate = newArray; } } public static void main(String args[]){ SxtArrayList sxtArrayList = new SxtArrayList(1); sxtArrayList.add("3"); sxtArrayList.add(0,"2"); sxtArrayList.add(0,"1"); sxtArrayList.set(2,"4"); for(int i=0;i<sxtArrayList.size();i++){ System.out.println(sxtArrayList.get(i)); } sxtArrayList.remove(0); sxtArrayList.remove("4"); System.out.println("执行 remove(0) 和remove(\"4\")后剩余元素"); for(int i=0;i<sxtArrayList.size();i++){ System.out.println(sxtArrayList.get(i)); } sxtArrayList.remove(0); System.out.println("执行 remove(0)否为空 "+sxtArrayList.isEmpty()); }}
0 0
- java用数组模拟实现ArrayList以及一些常用方法实现
- 用数组实现ArrayList
- java 数组实现迭代方法 iterator,模仿Arraylist
- 一些常用函数模拟实现
- [Java]ArrayList与LinkedList的模拟实现
- java中ArrayList的实现模拟
- 模拟ArrayList底层实现
- 源码实现ArrayList的常用方法
- java 集合类 原理以及实现--ArrayList
- Java -- 自己实现数组列表(Arraylist)
- 利用数组实现ArrayList
- Java用ArrayList实现队列
- Java用ArrayList实现栈
- 59_数组_模拟ArrayList容器的底层实现_JDK源码分析ArrayList
- JAVA学习笔记29——模拟实现ArrayList
- 用数组来实现表(ArrayList)
- 简单模拟ArrayList的一些方法
- java中用HashMap,ArrayList,TreeMap实现一个模拟斗地主发牌的用例
- 毕业季-返璞归真,重新上路
- 二三、vue2与vue1的区别(一)
- 如何制作一个Arduino温度数据记录仪
- 趣味编程:静夜思(Functional Java版)
- Java笔记
- java用数组模拟实现ArrayList以及一些常用方法实现
- 学习笔记 Hadoop的job提交过程,shuffle过程以及HA机制的实现
- EntityFramework之数据库以及表基本创建(一)
- OLTP与OLAP理解
- 服务发现系统consul介绍
- Mongodb查询数据 更新数据
- spark厦大---机器学习工作流(ML Pipelines)—— spark.ml包
- 1488: 国王的战争
- 实验楼Vim编辑器 学习笔记(3)