吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6004|回复: 9
收起左侧

[Java 转载] 如何用java语言创建不定长动态数组

[复制链接]
qwuiop789 发表于 2015-3-28 23:08
public class intArray {
private int theSize=0;;
private int a_int[]={};
public intArray(int a[]){
this.a_int=a;
this.theSize=a.length;
}
public intArray(){
this.theSize=0;
}

public int getSize(){
return this.theSize;
}
public int getAt(int nIndex){
return this.a_int[nIndex];
}
public void SetAt(int nIndex , int newElement){
this.a_int[nIndex] =newElement;
}
public void add(int nIndex){
int old[] = this.a_int;

this.a_int= new int[this.theSize+1];

for(int i =0;i
a_int[i]= old[i];
}
if(this.theSize>0){
a_int[this.theSize]=nIndex;
}else{
a_int[0]=nIndex;
}
this.theSize++;
}
public static void main(String args[]){

intArray array = new intArray();

array.add(1);
array.add(2);
array.add(3);
array.add(4);
array.add(5);
for(int i = 0;i
System.out.println(array.getAt(i));
}

}
}



再给个任意类型的
public class myArray {
private int theSize=0;
private AnyType theItem[]=null;
public myArray(AnyType a[]){
this.theItem=a;
this.theSize=a.length;
}
public myArray(){

}
public int getSize(){
return this.theSize;
}
public AnyType get(int nIndex){
return this.theItem[nIndex];
}
public void Set(int nIndex , AnyType newElement){
this.theItem[nIndex] =newElement;
}
public void add(AnyType newVal){
AnyType old[]=this.theItem;

this.theItem= (AnyType[]) new Object[theSize+1];
if(theSize!=0){
for(int i =0;i
this.theItem[i]= old[i];
}
}
this.theItem[this.theSize]=newVal;
this.theSize++;
}
public static void main(String args[]){
myArray array = new myArray();
array.add("1");
array.add("2");
array.add("3");
array.add("a");
array.add("b");
array.add("c");
for(int i =0;i
System.out.println(array.get(i));
}
}
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| qwuiop789 发表于 2015-3-28 23:12
麻烦高手将各行代码注释一下,通俗讲一下原理,谢谢!
0元元0 发表于 2015-3-28 23:16
动态数组无非就是内存拷贝,没有真正意义上的动态。ArrayList底层实现就是数组,楼主可以参考ArrayList的实现
SGC沉默 发表于 2015-3-28 23:31
ezhu52pj 发表于 2015-3-29 00:07
Java的数组是定长的。不定长的数组,应该需要自己实现。
 楼主| qwuiop789 发表于 2015-3-29 07:55
0元元0 发表于 2015-3-28 23:16
动态数组无非就是内存拷贝,没有真正意义上的动态。ArrayList底层实现就是数组,楼主可以参考ArrayList的实 ...

不管输入多少数据,下标都不会越界,对吗?
q30416657 发表于 2015-3-30 09:41
本帖最后由 q30416657 于 2015-3-30 09:47 编辑

[Java] 纯文本查看 复制代码
public class intArray 
{
        private int theSize=0;        //元素个数。
        private int a_int[]={};
        //构造函数: 接受一个int型数组。
        public intArray(int a[]){
                this.a_int=a;        //this.a_int接受a的地址。
                this.theSize=a.length;//让本对象中的元素个数等于传入的数组元素个数。
        }
        //无参构造函数:
        public intArray(){
                this.theSize=0;
        }
        //获得thesize。
        public int getSize(){
                return this.theSize;
        }
        //获得指定下标的元素的值。
        public int getAt(int nIndex){
                return this.a_int[nIndex];
        }
        //设置指定下标的元素的值:
        public void SetAt(int nIndex , int newElement){
                this.a_int[nIndex] =newElement;
        }
        //传入一个nIndex
        public void add(int nIndex){
                int old[] = this.a_int;        //让old[]指向this.a_int

                this.a_int= new int[this.theSize+1]; //重新构建一个数组。 使这个数组的元素个数比原来多1;
                        
                //这里应该是吧old中的每个元素都复制给a_int中的对应元素。
                for(int i =0;i<old.length; i++)
                {
                        a_int[i]= old[i];
                } 
                //判断theSize的值是否大于0 如果大于0那么a_int数组中的最后一个元素值为传入的nIndex值。
                if(this.theSize>0){
                        a_int[this.theSize]=nIndex;
                }
                //如果不大于0 那么 a_int[0]等于传入的nIndex值;
                else{
                        a_int[0]=nIndex;
                }
                //然后让thesize++  意思应该是表明数组长度+1;
                this.theSize++;
        }
        public static void main(String args[]){

        intArray array = new intArray();                //new了一个intArray的对象

        array.add(1);                //添加一个值为1 的元素。                
        array.add(2);                
        array.add(3);
        array.add(4);
        array.add(5);[/i][/i][i][i]       //遍历输出(数组)元素。
        for(int i = 0;i<array.getSize(); i++)
                System.out.println(array.getAt(i));
}

} 
} 

q30416657 发表于 2015-3-30 09:42
不是学java的可能有的地方解释的不是那么准确。
叶子嘤咛 发表于 2015-3-30 16:35
推荐使用ArrayList
叶子嘤咛 发表于 2015-3-30 16:39
public class intArray {
private int theSize=0;;
private int a_int[]={};
public intArray(int a[]){
this.a_int=a;
this.theSize=a.length;
}
public intArray(){
this.theSize=0;
}

public int getSize(){
return this.theSize;
}
public int getAt(int nIndex){
return this.a_int[nIndex];
}
public void SetAt(int nIndex , int newElement){
this.a_int[nIndex] =newElement;
}
public void add(int nIndex){
int old[] = this.a_int;

this.a_int= new int[this.theSize+1]; 

for(int i =0;i
a_int[i]= old[i];
} 
if(this.theSize>0){
a_int[this.theSize]=nIndex;
}else{
a_int[0]=nIndex;
}
this.theSize++;
}
public static void main(String args[]){

intArray array = new intArray();

array.add(1);
array.add(2);
array.add(3);
array.add(4);
array.add(5);
for(int i = 0;i
System.out.println(array.getAt(i));
}

} 
} 



再给个任意类型的
public class myArray {
private int theSize=0;
private AnyType theItem[]=null;
public myArray(AnyType a[]){
this.theItem=a;
this.theSize=a.length;
}
public myArray(){

}
public int getSize(){
return this.theSize;
}
public AnyType get(int nIndex){
return this.theItem[nIndex];
}
public void Set(int nIndex , AnyType newElement){
this.theItem[nIndex] =newElement;
}
public void add(AnyType newVal){ 
AnyType old[]=this.theItem;

this.theItem= (AnyType[]) new Object[theSize+1];
if(theSize!=0){
for(int i =0;i
this.theItem[i]= old[i];
}
}
this.theItem[this.theSize]=newVal;
this.theSize++;
}
public static void main(String args[]){
myArray array = new myArray();
array.add("1");
array.add("2");
array.add("3");
array.add("a");
array.add("b");
array.add("c");
for(int i =0;i
System.out.println(array.get(i));
}
}
}

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 15:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表