多年前写过的一个demo,仅供参考,如有不正确,望多谅解!具体代码如下:
public class MyArrayList {
// 1.定义一个对象数组并且初始化长度为10
public Object myArrayList[] = new Object[10];
// 2.创建方法
/*************************************************/
/*************************************************/
//第一:添加的方法,根据具体元素添加
/**
* 添加元素的方法
* @param e 添加的数据
*/
public void add(Object e) {
int index = -1; //用于记录插入数据在数组中的位置
for (int i = 0; i < myArrayList.length; i++) {
//如果数组中有空的位置,那么可以向数组中添加数据
if(myArrayList[i] == null){
index = i;
break;
}
}
//当数组还没满,可以向数组中添加数据
if(index != -1){
myArrayList[index] = e;
}else {
// 该数组用于数组动态增长
Object newMyArrayList[] = new Object[myArrayList.length+myArrayList.length/2];
//将数组中的值复制到新数组中
for (int i = 0; i < myArrayList.length; i++) {
newMyArrayList[i] = myArrayList[i];
}
//将数组放在新数组中空的位置
for (int i = 0; i < newMyArrayList.length; i++) {
if(newMyArrayList[i] == null){
newMyArrayList[i] = e;
break;
}
}
//数组关联
myArrayList = newMyArrayList;
}
}
/*************************************************/
/*************************************************/
// 第二:根据下标值往数组里添加
/**
* 根据指定下标值往数组里添加元素
* @param index 下标值
* @param e 具体的元素
*/
public void add(int index,Object e) throws IndexOutOfBoundsException {
if(index < size()){
//元素后移
for (int i = myArrayList.length-1; i > index; i--) {
myArrayList[i] = myArrayList[i-1];
}
myArrayList[index] = e;
}else{
throw new IndexOutOfBoundsException("Index: " + index + ",Size: " + size());
}
}
/*************************************************/
/*************************************************/
// 第三:移除数组中元素
/**
* 移除元素的方法
* @param e 移除的元素
*/
public void remove(Object e) {
int index = -1; //要删除元素的下标值
for (int i = 0; i < myArrayList.length; i++) {
if(myArrayList[i] != null && myArrayList[i] == e){
index = i;
}
}
//如果删除的是数组最后一位,那位置不用移动
if(index == myArrayList.length -1){
myArrayList[index] = null;
}else if(index == -1){
}else{
//定义一个新的数组用来保存删除过后的元素
Object[] newArrayList = new Object[myArrayList.length];
/**
* 如果删除的位置在中间某个元素,那么在index之前的元素不用移动位置
* 在index后的元素需要移动位置
*/
for (int i = 0; i < myArrayList.length; i++) {
if (i < index) {
newArrayList[i] = myArrayList[i];
}
if (i > index) {
newArrayList[i - 1] = myArrayList[i];
}
}
//关联
myArrayList = newArrayList;
}
}
/*************************************************/
/*************************************************/
// 第四:查找指定下标元素
/**
* 查找指定下标元素
* @param index 指定下标值
* @return 指定元素
*/
public Object get(int index) throws IndexOutOfBoundsException {
Object object = null;
if(index < size()){
for (int i = 0; i < myArrayList.length; i++) {
if(myArrayList[index] == myArrayList[i]){
object = myArrayList[i];
break;
}
}
}else{
throw new IndexOutOfBoundsException("Index: " + index + ",Size: " + size());
}
return object;
}
/***************************************************************/
/***************************************************************/
/**
* 返回数组中非空元素个数
* @return 有效元素个数
*/
public int size() {
int num = 0;
for (int i = 0; i < myArrayList.length; i++) {
if(myArrayList[i] != null){
num++;
}
}
return num;
}
}
测试功能类:
public class MyArrayListTest {
public static void main(String[] args) {
// 1.创建4个企鹅对象
Pet pet1 = new Penguin("楠楠", "Q妹");
Pet pet2 = new Penguin("男男", "Q仔");
Pet pet3 = new Penguin("花花","Q妹");
Pet pet4 = new Penguin("华华", "Q仔");
//创建MyArrayList对象
MyArrayList myArrayList = new MyArrayList();
// 2.创建ArrayList并且将4个企鹅对象放入其中
myArrayList.add(pet1);
myArrayList.add(pet2);
myArrayList.add(pet3);
myArrayList.add(1,pet4);
// 3.查看企鹅数量
System.out.println("共有企鹅" + myArrayList.size() + "只.");
// 4.遍历所有企鹅
System.out.println("分别是:");
for (int i = 0; i < myArrayList.size(); i++) {
Penguin penguin = (Penguin)myArrayList.get(i);
penguin.print();
}
// 5.删除集合中部分元素
myArrayList.remove(0);
myArrayList.remove(pet3);
// 6.显示删除后的信息
System.out.println("\n删除之后还有企鹅" + myArrayList.size() + "只.");
System.out.println("分别是:");
for (int i = 0; i < myArrayList.size(); i++) {
Penguin penguin = (Penguin)myArrayList.get(i);
penguin.print();
}
// myArrayList.add("a");
// myArrayList.add("b");
// myArrayList.add("c");
// myArrayList.add("d");
// myArrayList.add("e");
// myArrayList.add("f");
// myArrayList.add("g");
// myArrayList.add("h");
// myArrayList.add("i");
// myArrayList.add("j");
// myArrayList.add("k");
// myArrayList.add("l");
// myArrayList.add(10, "可以吗");
// System.out.println("集合中共有元素个数:"+myArrayList.size());
// System.out.println("删除以前,共有元素:");
// for (int i = 0; i < myArrayList.size(); i++) {
// System.out.print(myArrayList.get(i) + "\t");
// }
// System.out.println();
// System.out.println("删除一个元素");
// myArrayList.remove("k");
// System.out.println();
// System.out.println("集合中共有元素个数:"+myArrayList.size());
// System.out.println("删除之后的元素:");
// for (int i = 0; i < myArrayList.size(); i++) {
// System.out.print(myArrayList.get(i) + "\t");
// }
}
}
另附对象类,抽象宠物类
/**
*
* @功能: 描述宠物的信息
* @作者:
* @时间:2014-4-27
* @地点:
* @Version 1.0
*/
public abstract class Pet {
// 1.定义属性
private String name; //昵称
private int health = 100; //健康值
private int love; //亲密度
// 2.建构造器
// 获取昵称
public String getName() {
return name;
}
/**
* 设置昵称
* @param name
*/
public void setName(String name){
this.name = name;
}
// 获取健康值
public int getHealth() {
return health;
}
/**
* 设置健康值
* @param health
*/
public void setHealth(int health){
this.health = health;
}
// 获取亲密度
public int getLove() {
return love;
}
/**
* 设置亲密度
* @param love
*/
public void setLove(int love){
this.love = love;
}
// 3.构造函数
/**
* 无参的构造方法
*/
public Pet(){
}
/**
* 带参的构造方法
* @param name
*/
public Pet(String name ){
this.name = name;
}
// 4.创建方法
/**
* 创建宠物吃的抽象方法
*/
public abstract void eat();
/**
* 显示宠物信息的方法
*/
public abstract void print();
}
继承宠物类,重写父类方法
/**
*
* @功能: 描述企鹅的信息
* @作者:
* @时间:2014-4-27
* @地点:
* @Version 1.0
*/
public class Penguin extends Pet{
// 1.定义属性
private String sex; //性别
/**
* 获取性别
* @return
*/
public String getSex() {
return sex;
}
/**
* 设置性别
* @param sex
*/
public void setSex(String sex) {
this.sex = sex;
}
private String id; //编号
/**
* 获取编号
* @return 编号
*/
public String getId() {
return id;
}
/**
* 设置编号
* @param id 编号
*/
public void setId(String id) {
this.id = id;
}
// 2.构造函数
/**
* 无参的构造函数
*/
public Penguin() {
}
/**
* 带参的构造方法
* @param name 名字
* @param sex 性别
*/
public Penguin(String name,String sex){
super(name);
this.sex = sex;
}
/**
* 三个参数的带参构造方法
* @param id 编号
* @param name 名字
* @param sex 性别
*/
public Penguin(String id,String name,String sex){
super(name);
this.id = id;
this.sex = sex;
}
@Override
/**
* 重写父类方法,实现企鹅吃的方法
*/
public void eat() {
if(getHealth() >= 100){
System.out.println("企鹅"+ getName() + "吃饱了!" );
}else{
setHealth(getHealth()+4);
System.out.println("企鹅"+ getName() + "吃饱了!健康值加4。" );
}
}
/**
* 企鹅游泳的方法
*/
public void swimming(){
System.out.println("企鹅" + getName()+"正在游泳!");
setHealth(getHealth()-10); //健康值减少10
setLove(getLove() + 5); // 亲密度增加5
}
/**
* 重写父类方法,显示企鹅信息的方法
*/
public void print(){
System.out.println(super.getName() + "\t" + this.getSex());
}
}
网友评论