使用数组来实现自定义ArrayList,除了基本的增删查改等方法之外,还添加了API中所使用到的一些方法,方便大家更好的理解ArrayList的实现,具体实现都有解释,主函数中给出了测试方法,代码如下:
/** * 自定义泛型列表 * @author 陈强 * @param <E> */ public class MyArrayList<E> { Object[] data=new Object[0];//初始数组,定义一个对象类型的数组保存数据 public static void main(String args[]){ //创建Integer类型的数组列表 MyArrayList<Integer> my=new MyArrayList<Integer>(); //添加元素 for(int i=1;i<=5;i++){ my.add(i); } //my.removeFromTo(1, 3); my.add(1); //my.turnArray(); //System.out.println("首次出现指定元素的位置是"+my.IndexOf(1)); System.out.println("最后一次出现指定元素的位置是"+my.LastIndexOf(1)); System.out.println("队列当前的长度是"+my.size()); my.print(); //System.out.println("获取的元素"+my.get(1)); } /** * 打印队列元素的方法 */ public void print(){ int length=data.length; for(int i=0;i<length;i++){ System.out.print(data[i]+" "); } } /** * 添加元素的方法 * @param e */ public void add(E e){ int length=data.length;//获取当前数组的长度 Object[] dest=new Object[length+1];//创建一个新数组 //先将原数组中的元素都复制过来 for(int i=0;i<length;i++){ dest[i]=data[i]; } dest[length]=e;//添加新元素 data=dest;//用新数组替换原来的数组 } /** * 插入元素的方法 * @param index 指定的下标 * @param e 插入的元素 */ public void insert(int index,E e){ int length=data.length; Object[] dest=new Object[length+1]; for(int i=0;i<index;i++){//将索引前的元素先复制过来 dest[i]=data[i]; } dest[index]=e;//添加新元素到索引位置 for(int j=index;j<length;j++){//再将后面一部分元素复制过来 dest[j+1]=data[j]; } data=dest; } /** * 删除元素的方法 * @param index 指定的下标 */ @SuppressWarnings("unchecked") public E remove(int index){ int length=data.length; Object[] dest=new Object[length-1]; for(int i=0;i<index;i++){//将索引前的元素复制过来 dest[i]=data[i]; } for(int j=index+1;j<length;j++){//跳过索引指定的位置 dest[j-1]=data[j]; } data=dest; return (E)data[index];//得到被移除的元素 } /** * 移除所有元素的方法 */ public void removeAll(){ Object dest[]=new Object[0]; data=dest; } /** * 获取队列的长度 */ public int size(){ return data.length; } /** * 获取指定下标的元素 */ @SuppressWarnings("unchecked") public E get(int index){ return (E) data[index]; } /** * 判断队列是否为空 */ public boolean isEmpty(){ return size()==0; } /** * 改变指定下标位置的元素的方法 * @param index * @param e */ public void set(int index,E e){ //方法类似插入的方法 int length=data.length; Object[] dest=new Object[length]; for(int i=0;i<index;i++){ dest[i]=data[i]; } dest[index]=e;//改变指定位置的元素 for(int j=index+1;j<length;j++){ dest[j]=data[j]; } data=dest; } /** * 删除从某一个下标位置开始到某一个下标位置结束的中间元素 * @param start 开始位置的下标 * @param end 结束位置的下标 */ public void removeFromTo(int start,int end){ int length=data.length; Object dest[]=new Object[length-(end-start)-1]; for(int i=0;i<start;i++){ dest[i]=data[i]; } for(int j=end+1;j<length;j++){ dest[j-(end-start)-1]=data[j]; } data=dest; } /** * 将列表翻转 */ public void turnArray(){ int length=data.length; int j=length-1; Object temp; for(int i=0;i<length/2;i++){ temp=data[j]; data[j]=data[i]; data[i]=temp; j--; } } /** * 搜索列表中首次出现指定元素的位置,如果不存在该元素则返回-1 * @param obj */ public int IndexOf(Object obj){ int length=data.length; for(int i=0;i<length;i++){ if(data[i]==obj){ return i; } } return -1; } /** * 搜索列表中最后一个出现指定元素的位置,如果不存在则返回-1 * @param obj 指定元素 */ public int LastIndexOf(Object obj){ int length=data.length; for(int i=length-1;i>=0;i--){ if(data[i]==obj){ return i; } } return -1; } }
相关推荐
自己写的ArrayList,请勿喷!
自定义实现的ArrayList数据结构,有大量注释以及编写思路,帮助新手用Java语言来实现数据结构
主要介绍了Java 中模仿源码自定义ArrayList的相关资料,需要的朋友可以参考下
主要介绍了Android编程实现使用Intent传输包含自定义类的ArrayList,涉及Android对象序列化、反序列化、Intent数据传输等相关操作技巧,需要的朋友可以参考下
自定义实现的ArrayList数据结构,有大量注释以及编写思路,帮助新手用Java语言来实现数据结构
主要介绍了Java针对ArrayList自定义排序的2种实现方法,结合实例形式总结分析了Java操作ArrayList自定义排序的原理与相关实现技巧,需要的朋友可以参考下
对ArrayList里装载的对象进行自定义排序(任意对象、任何字段、任何规则) ! ArrayList中可装载任何对象,并以指定的该对象的字段对该集合中的对象进行指定形式的排序(正序、反序)。 任何类通用........
ArrayList. 底层用数组实现, 自己编写的MyArrayList,初始长度10,扩容2倍.
队列的核心为先进先出,即先入队的元素先出队,在之前手写的ArrayList中添加了删除方法实现了队列 /** * 在之前自定义的动态数组基础上完成队列,动态数组中要添加删除方法 * * @author 大刘 */ public class ...
2、自定义view继承view,使用ArrayList保存每条Textitem 3、随机生成坐标点绘制每条TextItem,不断变换Text的横坐标实现弹幕的滚动 首先创建弹幕类,弹幕包括坐标,颜色,滚动速度,以及文字内容: public class ...
数据源中,dataitem中的数量要一致。 @Override protected float marginLengthSetting() { return 20*density;...//所有线条的颜色数组 点的颜色放在数据源中 该数组中顺序要与数据源ArrayList的顺序一致
方法和上一篇自定义ListView实现拖拽ListItem项交换位置一个原理。只是在交换位置上记录了X轴的相关坐标,计算了X轴的相关变量。实现效果图如下 说明: 本篇给出实现代码,但是不做任何说明。如需了解请看上一篇blog...
主要介绍了PHP实现C#山寨ArrayList的方法,通过一个php自定义类模拟实现C#中ArrayList的功能,具有一定参考借鉴价值,需要的朋友可以参考下
一款颜色,文字弧度大小,仪表角度都可以自定义的组件 项目集成:MeterView 项目目录——>build.gradle allprojects { repositories { ... maven { url 'https://jitpack.io' } } } app——>build.gradle ...
该功能可以实现输入条件和参数,返回true和false 还可以实现输入条件,和参数,计算出结果 ...List<Info> infos = new ArrayList(); infos.add(new Info("v,"ceil(v/100)*10000")); //条件和公式 具体可以看dome
使用Java自定义实现ArrayList,增加、删除、查询等。
import java.util.ArrayList; import java.util.List; import android.animation.Animator; import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.content.Context; imp
本文实例为大家分享了android推箱子游戏的具体实现代码,供大家参考,具体内容如下 自定义view: package com.jisai.materialdesigndemo.tuixiangzhi; import android.content.Context; import android.graphics...
本文实例讲述了jsp通过自定义标签库实现数据列表显示的方法。分享给大家供大家参考,具体如下: 1. 定义标签库类 UserListTag.java package com.yanek.cms.tag; import java.io.IOException; import java.util....