java中动态数组怎么定义,java静态数组与动态数组
声明:
数据为数组名。
大小为数组中最后一个元素的下一个位置。
实现动态数组的原因:
因为爪哇岛中的数组是静态的,在新的数组时就需要指定数组的大小,如果需要存储的元素为未知的个数,设置空间过大会造成浪费,设置空间过小会无法存入全部数据,我们利用自己写的调整大小()方法,便可以实现自动扩容,不再担心数组容量的问题。
需要自动扩容或自动缩容的时候一般是数组满了或数组空余空间过多的时候,多发生在添加和删除操作中。
当大小==数据长度的时候表示数组已满,调用resize(int newCapacity)方法,参数传入2 *数据长度,意为新创建的数组长度为原数组的二倍。
相关视频教程推荐:java课程
当大小==数据长度/4并且data.length/2!=0的时候,调用调整大小方法进行缩容。
在数组列表的自动扩容方法中参数默认为1.5 *容量。
在调整大小()方法实现中新的了一个新的名为新数据的数组用来接收原数组中的元素。利用为循环将数组中的元素进行转移。
add方法实现
//向指定位置添加元素e
public void add(int index,E e){
if(index0indexsize){
引发新的IllegalArgumentException(最后添加失败。需要索引错误);
}
if(size==data.length){
调整大小(2 *数据。长度);
}
for(int I=size-1;我=指数;我- ) {
data[I 1]=data[I];
}
数据[索引]=e;
尺寸;
}remove方法实现
//删除元素,并返回被删除的元素
public E remove(int index){
if(index0 index=size){
引发新的IllegalArgumentException( Remove失败。索引是非法的);
}
e ret=data[index];
for(int I=index 1;我尺寸;i ) {
数据[i-1]=数据[I];
}
尺寸-;
data[size]=null;//游荡对象!=内存泄漏
if(size==data。长度/4 data.length/2!=0){
调整大小(数据。长度/2);
}
返回浸水使柔软
}resize方法实现
私有void resize(int newCapacity){
E[] newData=(E[])新对象[新容量];
for(int I=0;我尺寸;i ) {
新数据[I]=数据[I];
}
数据=新数据
}数组类
包数组;
公共类数组{
私有E[]数据;
私有(同Internationalorganizations)国际组织大小;
@SuppressWarnings(未选中)
公共数组(内部容量){
数据=(E[])新对象[容量];
大小=0;
}
公共数组(){
这(10);
}
public int getSize(){
返回大小;
}
public int getCapacity(){
返回数据长度;
}
public boolean isEmpty(){
返回大小==0;
}
//向第一个位置添加一个元素
public void addFirst(E e){
add(0,e);
}
//向最后一个位置添加一个元素
public void addLast(E e){
添加(大小,e);
}
//向指定位置添加元素e
public void add(int index,E e){
if(index0indexsize){
引发新的IllegalArgumentException(最后添加失败。需要索引错误);
}
if(size==data.length){
调整大小(2 *数据。长度);
}
for(int I=size-1;我=指数;我- ) {
data[I 1]=data[I];
}
数据[索引]=e;
尺寸;
}
//获取指数位置的元素e
public E get(int index){
if(index0 index=size){
引发新的IllegalArgumentException(Get失败。索引是非法的);
}
返回数据[索引];
}
//修改指数索引位置的元素e
public void set(int index,E e){
if(index0 index=size){
引发新的IllegalArgumentException(Get失败。索引是非法的);
}
数据[索引]=e;
}
//判断元素是否存在于数组中
公共布尔值包含(E e){
for(int I=0;我尺寸;i ) {
if(data[i].等于(e)){
返回真实的
}
}
返回错误的
}
//找到元素并返回索引
公共int find(E e){
for(int I=0;我尺寸;i ) {
if(data[i].等于(e)){
返回我;
}
}
return-1;
}
//删除元素,并返回被删除的元素
public E remove(int index){
if(index0 index=size){
引发新的IllegalArgumentException( Remove失败。索引是非法的);
}
e ret=data[index];
for(int I=index 1;我尺寸;i ) {
数据[i-1]=数据[I];
}
尺寸-;
data[size]=null;//游荡对象!=内存泄漏
if(size==data。长度/4 data.length/2!=0){
调整大小(数据。长度/2);
}
返回浸水使柔软
}
public E removeFirst(){
return remove(0);
}
public E removeLast(){
返回删除(大小-1);
}
//从数组中删除元素e
public void removeElement(E e){
int index=find(e);
如果(索引!=-1){
移除(索引);
}
}
@覆盖
公共字符串toString(){
StringBuilder RES=new StringBuilder();
资源追加(字符串。格式(数组:大小=% d,容量=%d\n ,大小,数据。长度));
RES . append([);
for(int I=0;我尺寸;i ) {
RES . append(data[I]);
如果(我!=size-1){
res.append(,);
}
}
RES . append(]);
返回RES . tostring();
}
私有void resize(int newCapacity){
E[] newData=(E[])新对象[新容量];
for(int I=0;我尺寸;i ) {
新数据[I]=数据[I];
}
数据=新数据
}
}Main测试:
包数组;
公共类主要{
公共静态void main(String[] args){
数组整数arr=new Array();
for(int I=0;i 10i ) {
由…改编添加最后一个(I);
}
系统。出去。println(arr);
arr.add(1,100);
系统。出去。println(arr);
由…改编先加(-1);
系统。出去。println(arr);
arr.set(0,1);
系统。出去。println(arr);
}
}更多相关文章教程请访问:java开发入门以上就是爪哇岛中动态数组的具体实现的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。