[java]代码库
package cn.bjsxt.array;
/**
* 根据StringBuilder类的相关源码创建属于自己的数组类
* 该类与jdk中的数组的区别在于该类中可以存储任何的对象
* jdk中的数组只能存储char
* @author 刘涛
*
*/
public class MyArrayList {
private Object[] value;//定义数组
private int size;//数组的长度`
public MyArrayList(){
//无参构造器,默认初始化长度为16的数组
//value = new Object[16];
this(16);//此行代码和上面的代码含义相同,
}
public MyArrayList(int size){
value = new Object[size];
}
public void add(Object obj){
//因为默认的size初始化值为0,所以从0开始,然后自增会继续往后加
value[size] = obj;
size++;
//对数组进行扩容,如果初始化数组的长度无法满足数组时便会进行自动的扩容操作
if(size >= value.length){
int newCapacity = size*2;
Object[] newList = new Object[newCapacity];
for(int i = 0; i < value.length;i++){
newList[i] = value[i];
}
value = newList;
}
}
public Object get(int index){
if(index < 0 || index >= size){
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return value[index];
}
/**
* 删除数组中指定位置的元素,采取方式为数组中的最后一个元素替换将要删除的元素的
* @param index 要删除的元素的位置
*/
public void deleteCharAt(int index){
if (index < 0 || index > size) {
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
//将数组中的最后一个元素替换删除元素的即可
value[index] = value[size - 1];
//删除后数组的长度减1
size --;
//创建一个新的数组数组的长度为原来数组的长度减1,并将原来的数组中的元素复制到新数组中
Object[] newList = new Object[size];
for(int i = 0; i < size; i++){
newList[i] = value[i];
}
//System.arraycopy(value, 0, newList, 0, size);//将原始数组中的数据复制到新数组中的另一种方法
value = newList;
}
}
/**
* 删除数组中指定位置的元素,删除方式为删除指定位置的元素后,后面的元素向前移动
* @param index
*/
public void removeCharAt(int index){
//判断删除元素的位置是否在数组的长度范围内,若不在范围内则抛出异常
if (index < 0 || index > size) {
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
for(int i = 0; i < size; i ++){
value[i + index] = value[i + index + 1];
}
size --;
Object[] newList = new Object[size];
for(int i = 0; i < size; i ++){
newList[i] = value[i];
}
//System.arraycopy(value, 0, newList, 0, size);//将原始数组中的数据复制到新数组中的另一种方法
value = newList;
}
}
public void insertCharAt(int index,Object obj){
if (index < 0 || index > size ) {
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
value[size] = obj;
size++;
Object[] newList = new Object[size];
System.arraycopy(value, 0, newList, 0, size);
value = newList;
}
}
/***
* 该方法还需要进行调整 目前还无法实现
* @param index
* @param obj
*/
public void insert(int index,Object obj){
if (index < 0 || index > size ) {
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
size++;
for(int i = 0;i < size; i ++){
System.out.println(i);
if((index + i + 1) > size){
value[index + i + 1] = null;
return;
}else{
value[index + 2 + i] = value[index + i + 1];
value[index] = obj;
}
}
Object[] newList = new Object[size];
System.arraycopy(value, 0, newList, 0, size);
value = newList;
}
}
/**
* 删除数组中指定区间的元素
* @param start 区间起始位置
* @param end 区间结束位置
*/
public void remove(int start,int end){
if(start < 0 || end > size || end < 0 || start > size){
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
for(int i = 0; i < size; i ++){
if(i+end > size){
value[i + start] = null;
}else{
value[i + start] = value[i + end];
}
}
size -= end - start;
Object[] newList = new Object[size];
for(int i = 0 ; i < size; i ++){
newList[i] = value[i];
}
//System.arraycopy(value, 0, newList, 0, size);//将原始数组中的数据复制到新数组中的另一种方法
value = newList;
}
}
public static void main(String[] args) {
MyArrayList my = new MyArrayList(2);
my.add("aaa");
my.add("bbb");
my.add("ccc");
my.add(new Human("孙悟空",500,true));
// Human h = (Human) my.get(3);
// System.out.println(h.getName());
// System.out.println(h.isGender());
// System.out.println(h.getAge());
// System.out.println(my.get(2));
System.out.println(my.size);
// my.insertCharAt(3, "eee");
// my.insert(4, "fff");
System.out.println();
// my.deleteChar(1);
// my.removeCharAt(1);
// my.remove(1, 3);
my.insert(3, "fff");
for(int i = 0; i < my.size; i ++){
System.out.println(my.get(i));
}
System.out.println(my.size);
/*System.out.println(my.size);
Human h1 = (Human) my.get(1);
System.out.println(h1.getAge());*/
}
}
初级程序员
by: 简明 发表于:2017-11-27 16:37:04 顶(0) | 踩(0) 回复
谢谢分享,好好学习
回复评论