java 实现数组扩容与缩容案例

 更新时间:2021年02月04日 08:47:41   作者:Code,BetterCode  
这篇文章主要介绍了java 实现数组扩容与缩容案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

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实现一个栈(可以自动扩容)

先声明接口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);
 } 
}

输出结果

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

相关文章

  • java类加载机制、类加载器、自定义类加载器的案例

    java类加载机制、类加载器、自定义类加载器的案例

    这篇文章主要介绍了java类加载机制、类加载器、自定义类加载器的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 集成apollo动态日志取缔logback-spring.xml配置

    集成apollo动态日志取缔logback-spring.xml配置

    这篇文章主要为大家介绍了集成apollo动态日志取缔logback-spring.xml配置的过程内容详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02
  • 关于在Java中如何使用yaml的实例

    关于在Java中如何使用yaml的实例

    这篇文章主要介绍了关于在Java中如何使用yaml的实例,YAML是一种轻量级的数据序列化格式。它以易读、易写的文本格式表示数据,支持列表、字典等各种数据结构,被广泛应用于配置文件、数据传输协议等领域,需要的朋友可以参考下
    2023-08-08
  • Java利用Dijkstra算法求解拓扑关系最短路径

    Java利用Dijkstra算法求解拓扑关系最短路径

    迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学迪家迪杰斯特拉于1959年提出的,因此又叫狄克斯特拉算法。本文将利用迪克斯特拉(Dijkstra)算法求拓扑关系最短路径,感兴趣的可以了解一下
    2022-07-07
  • JAVA字符串格式化-String.format()的使用

    JAVA字符串格式化-String.format()的使用

    本篇文章主要介绍了JAVA字符串格式化-String.format()的使用,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • Mybatis-plus和Mybatis出现版本不兼容的问题解决

    Mybatis-plus和Mybatis出现版本不兼容的问题解决

    MyBatis-Plus 与 MyBatis 之间的兼容性问题通常是由于版本不匹配引起的,本文主要介绍了Mybatis-plus和Mybatis出现版本不兼容的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • Java ConcurrentHashMap的源码分析详解

    Java ConcurrentHashMap的源码分析详解

    ConcurrentHashMap(CHM)是日常开发中使用频率非常高的一种数据结构,想对于普通的HashMap,CHM提供了线程安全的读写,CHM里面使用了许多比较精妙的优化&操作。本文主要对CHM的整体结构、初始化,查找,插入等做分析
    2023-03-03
  • [Java]详解Socket和ServerSocket学习笔记

    [Java]详解Socket和ServerSocket学习笔记

    即时类应用或者即时类的游戏,HTTP协议很多时候无法满足于我们的需求,这会,Socket对于我们来说就非常实用了。本篇文章主要介绍了Socket和ServerSocket,有兴趣的可以了解一下。
    2016-12-12
  • springboot获取真实ip地址的方法实例

    springboot获取真实ip地址的方法实例

    在使用springboot时,需要获取访问客户端的IP地址,所以下面这篇文章主要给大家介绍了关于springboot获取真实ip地址的相关资料,需要的朋友可以参考下
    2022-06-06
  • 一小时迅速入门Mybatis之Prepared Statement与符号的使用

    一小时迅速入门Mybatis之Prepared Statement与符号的使用

    这篇文章主要介绍了一小时迅速入门Mybatis之Prepared Statement与符号的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09

最新评论