Java如何实现数组动态扩容与缩容的示例?

2026-04-28 07:002阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计832个文字,预计阅读时间需要4分钟。

Java如何实现数组动态扩容与缩容的示例?

javapublic static T[] dilatationArray(T[] datas, int newLen) { // 确保newlen不为负数 newLen=newLen <0 ? 0 : newLen;

// 生成一个新数组,并复制原数组内容 return Arrays.copyOf(datas, newLen);}

我就废话不多说了,大家还是直接看代码吧~

public static <T> T[] dilatationArray(T[] datas,int newlen) { //不能为负数 newlen = newlen<0?0:newlen; //生成一个新数组,并copy原值到新数组 return Arrays.copyOf(datas, newlen); }

package testpro; import java.util.Arrays; /** * 数组扩容缩容 * 扩容之后扩容部分按照类型默认赋值为0,false或者null * @author Administrator * */ public class ArrayDilatation { public static void main(String[] args) { Student[] students = new Student[60]; for (int i=0;i<students.length;i++) { System.out.println(students[i]); students[i] = new Student("Stu"+i,"Gen"+i,i); System.out.println(students[i]); } System.out.println(students); students = dilatationArray(students, 60); for (Student student : students) { System.out.println(student); } System.out.println(students); } public static <T> T[] dilatationArray(T[] datas,int newlen) { //不能为负数 newlen = newlen<0?0:newlen; //生成一个新数组,并copy原值到新数组 return Arrays.copyOf(datas, newlen); } } class Student{ private String name; private String gender; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(String name, String gender, int age) { super(); this.name = name; this.gender = gender; this.age = age; } @Override public String toString() { return "Student [name=" + name + ", gender=" + gender + ", age=" + age + "]"; } }

补充:Java实现一个栈(通过自定义数组实现,可以自动扩容)

Java如何实现数组动态扩容与缩容的示例?

Java实现一个栈(可以自动扩容)

先声明接口interface Stack<E>

/** * @author yinglongwu */ //适用泛型 public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e);//入栈 E pop();//出栈 E peek();//查看栈顶元素 }

class ArrayStack<E>实现接口

这里是通过自定义的Array类里的方法来实现Stack接口,进而形成这个ArrayStack类

自定义的Array类:点我跳转

/** * @author yinglongwu */ //这里通过自定义的Array类里的方法实现Stack接口,进而形成这个ArrayStack, //并且也可以自动扩容 public class ArrayStack<E> implements Stack<E> { //这个Array<E>是自己封装的 Array<E> array; //有参构造 public ArrayStack(int capacity) { array = new Array<>(capacity); } //无参构造 public ArrayStack() { array = new Array<>();//使用Array类里的无参构造 } //获取栈的最大容量 public int getCapacity() { return array.getCapacity();//调用的方法也是自己封装的Array类里的方法 } //对接口中的方法进行重写 @Override public int getSize() { return array.getSize(); } @Override public boolean isEmpty() { return array.isEmpty(); } //入栈 @Override public void push(E e) { array.addLast(e); } //出栈 @Override public E pop() { return array.removeLast(); } //查看栈顶元素 @Override public E peek() { return array.getLast(); } //对toString方法进行重写,方便输出栈的基本信息 @Override public String toString() { StringBuilder res = new StringBuilder(); res.append("Stack: "); res.append('['); for (int i = 0; i < array.getSize(); i++) { res.append(array.get(i)); if (i != array.getSize()-1) { res.append(", "); } } res.append("] top");//表明右侧是栈顶 return res.toString(); } }

测试使用这个ArrayStack栈

/** * @author yinglongwu */ public class Main { public static void main(String[] args) { //测试class ArrayStack ArrayStack<Integer> stack = new ArrayStack<Integer>();//new ArrayStack<Integer>()里的Integer可写可不写 //包装类和其对应的基本数据类型可以自动转换 //将0到4入栈 for (int i = 0; i < 5; i++) { stack.push(i); System.out.println(stack); } //出一次栈 stack.pop(); System.out.println(stack); } }

输出结果

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。如有错误或未考虑完全的地方,望不吝赐教。

本文共计832个文字,预计阅读时间需要4分钟。

Java如何实现数组动态扩容与缩容的示例?

javapublic static T[] dilatationArray(T[] datas, int newLen) { // 确保newlen不为负数 newLen=newLen <0 ? 0 : newLen;

// 生成一个新数组,并复制原数组内容 return Arrays.copyOf(datas, newLen);}

我就废话不多说了,大家还是直接看代码吧~

public static <T> T[] dilatationArray(T[] datas,int newlen) { //不能为负数 newlen = newlen<0?0:newlen; //生成一个新数组,并copy原值到新数组 return Arrays.copyOf(datas, newlen); }

package testpro; import java.util.Arrays; /** * 数组扩容缩容 * 扩容之后扩容部分按照类型默认赋值为0,false或者null * @author Administrator * */ public class ArrayDilatation { public static void main(String[] args) { Student[] students = new Student[60]; for (int i=0;i<students.length;i++) { System.out.println(students[i]); students[i] = new Student("Stu"+i,"Gen"+i,i); System.out.println(students[i]); } System.out.println(students); students = dilatationArray(students, 60); for (Student student : students) { System.out.println(student); } System.out.println(students); } public static <T> T[] dilatationArray(T[] datas,int newlen) { //不能为负数 newlen = newlen<0?0:newlen; //生成一个新数组,并copy原值到新数组 return Arrays.copyOf(datas, newlen); } } class Student{ private String name; private String gender; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(String name, String gender, int age) { super(); this.name = name; this.gender = gender; this.age = age; } @Override public String toString() { return "Student [name=" + name + ", gender=" + gender + ", age=" + age + "]"; } }

补充:Java实现一个栈(通过自定义数组实现,可以自动扩容)

Java如何实现数组动态扩容与缩容的示例?

Java实现一个栈(可以自动扩容)

先声明接口interface Stack<E>

/** * @author yinglongwu */ //适用泛型 public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e);//入栈 E pop();//出栈 E peek();//查看栈顶元素 }

class ArrayStack<E>实现接口

这里是通过自定义的Array类里的方法来实现Stack接口,进而形成这个ArrayStack类

自定义的Array类:点我跳转

/** * @author yinglongwu */ //这里通过自定义的Array类里的方法实现Stack接口,进而形成这个ArrayStack, //并且也可以自动扩容 public class ArrayStack<E> implements Stack<E> { //这个Array<E>是自己封装的 Array<E> array; //有参构造 public ArrayStack(int capacity) { array = new Array<>(capacity); } //无参构造 public ArrayStack() { array = new Array<>();//使用Array类里的无参构造 } //获取栈的最大容量 public int getCapacity() { return array.getCapacity();//调用的方法也是自己封装的Array类里的方法 } //对接口中的方法进行重写 @Override public int getSize() { return array.getSize(); } @Override public boolean isEmpty() { return array.isEmpty(); } //入栈 @Override public void push(E e) { array.addLast(e); } //出栈 @Override public E pop() { return array.removeLast(); } //查看栈顶元素 @Override public E peek() { return array.getLast(); } //对toString方法进行重写,方便输出栈的基本信息 @Override public String toString() { StringBuilder res = new StringBuilder(); res.append("Stack: "); res.append('['); for (int i = 0; i < array.getSize(); i++) { res.append(array.get(i)); if (i != array.getSize()-1) { res.append(", "); } } res.append("] top");//表明右侧是栈顶 return res.toString(); } }

测试使用这个ArrayStack栈

/** * @author yinglongwu */ public class Main { public static void main(String[] args) { //测试class ArrayStack ArrayStack<Integer> stack = new ArrayStack<Integer>();//new ArrayStack<Integer>()里的Integer可写可不写 //包装类和其对应的基本数据类型可以自动转换 //将0到4入栈 for (int i = 0; i < 5; i++) { stack.push(i); System.out.println(stack); } //出一次栈 stack.pop(); System.out.println(stack); } }

输出结果

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。如有错误或未考虑完全的地方,望不吝赐教。