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);
 }
}

输出结果

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

(0)

相关推荐

  • Java使用数组实现ArrayList的动态扩容的方法

    提到数组大家肯定不会陌生,但我们也知道数组有个缺点就是在创建时就确定了长度,之后就不能更改长度.所以Java官方向我们提供了ArrayList这个可变长的容器.其实ArrayList底层也是用数组进行实现的,今天我们就自己使用数组实现ArrayList的功能. 一.整体框架 废话不多说,我们以存放int类型元素为例,看一下ArrayList需要的成员变量和需要实现的方法. public class ArrayList private int size;//用来记录实际存储元素个数 private

  • 数组在java中的扩容的实例方法

    在使用数组的时候,因为大小的限制,难免会出现不够用的现象.直接给数据对象扩容是不可行的,这时候就需要我们找寻一些其他的方法.本篇先为大家简单分析扩容的原理,然后创建一个数组供大家使用,最后提供两种数组扩容方法:for循环和Arrays,下面一起来看具体的操作. 1.扩容的原理 (1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. (2)利用数组复制方法可以变通的实现数组扩容. (3)System.arraycopy()可以复制数组. (4)Arrays.copyOf()可以简便的创建

  • Java数组扩容实现方法解析

    这篇文章主要介绍了Java数组扩容实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一种 int[] arr2=new int[arr1.length*2] //新数组的长度 第二种 int[] arr2=java.util.Arrays.copyOf(原数组名,新数组的长度); 第三种 int[] arr2=new int[arr1.length*2] System.arraycopy(原数组名,起始下标,新数组名,起始下标,复制

  • java数组的三种扩容方式以及程序实现详解

    因为数组是在内存中连续的一段存储空间,所以数组一旦被创建,空间就固定了,长度是不能扩增的. 数组的长度是固定的,如果需要扩充**,必须创建新数组,原数组的长度要复制到新数组中 .** java中,数组类型的变量传值的时候,事实上传递的是数组的地址 . Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. 2)利用数组复制方法可以变通的实现数组扩容. 3)System.arraycopy()可以复制数组. 4)Arrays.copyOf()可以简便的创建数组副本.

  • Java数组扩容实例代码

    在写程序的过程中,我们常常会碰见数组空间不够用的情况,比如我已经初始化了一个数组int []a = {1,2,3,4,5,6,7,8,9,10} ;这时,我想往数组下标3的位置插入一个元素,该怎么做?用C语言实现太难了吧,需要调用memcpy函数要一个一个偏,但是在java中就不用那么麻烦了,有种叫数组的扩容方式,轻松实现.来看看代码: public class HelloWorld { public static void main(String[] args){ // Scanner s =

  • Java数组的扩容代码示例

    在写程序的过程中,我们常常会碰见数组空间不够用的情况,比如我已经初始化了一个数组int []a = {1,2,3,4,5,6,7,8,9,10} ;这时,我想往数组下标3的位置插入一个元素,该怎么做?用C语言实现太难了吧,需要调用memcpy函数要一个一个偏,但是在java中就不用那么麻烦了,有种叫数组的扩容方式,轻松实现.来看看代码: public class HelloWorld { public static void main(String[] args){ // Scanner s =

  • 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; /** * 数组扩容缩容 * 扩容之后扩容部分按

  • java基础-数组扩容详解

    目录 数组与链表的比较: ArrayList: LinkedList: 总结 数组与链表的比较: 数组通过下标访问的话是O(1) 数组一旦声明 长度就是固定的 数组的数据是物理逻辑均连续的 链表增删要快一些, 数组遍历快一些 长度一定的话, 数组的存储空间比链表要小 ArrayList: ArrayList是List接口的实现类,它是支持根据需要而动态增长的数组:java中标准数组是定长的,在数组被创建之后,它们不能被加长或缩短.这就意味着在创建数组时需要知道数组的所需长度,但有时我们需要动态程

  • k8s中如何实现pod自动扩缩容详解

    目录 k8s应用自动扩缩容概述 为什么要自动扩缩容 扩缩容分类 按对象层面 按方式分类 如何实现自动扩缩容 HPA运作方式 指标信息来源 部署HPA实现pod自动扩缩容 数据采集组件metrics-server 概述 部署 测试环境准备 创建php-apache服务 创建nginx服务 HPA基于cpu自动扩缩容 创建HPA基于cpu自动扩缩容 压测php-apache服务,看扩容 停止对 php-apache 服务压测,看缩容 HPA基于内存自动扩缩容 创建HPA基于内存自动扩缩容 压测ngi

  • java Arrays快速打印数组的数据元素列表案例

    1.Arrays.toString 用来快速打印一维数组的数据元素列表 2.Arrays.deepToString 快速打印一个二维数组的数据元素列表 public static strictfp void main(String[] args) { String[][] arr = {{"aaa","bbb"},{"ccc"}}; for(int x=0;x<arr.length;x++){ for(int y=0;y<arr[x]

  • java 字符串转化为字符数组的3种实现案例

    你可以选择最简单的方法解题,但是你需要掌握所有的方法当做知识储备第一种最简单,但是其适用前提是输入: 4(个数) 然后是 1 2 3 4 (也就是输入数字),放入kk数组之中,输出1 2 3 4 import java.util.*; public class Main { public static void main(String args[]) { Scanner cn=new Scanner(System.in); int count=cn.nextInt(); int []kk=new

  • Java封装数组之动态数组实现方法详解

    本文实例讲述了Java封装数组之动态数组实现方法.分享给大家供大家参考,具体如下: 前言:在此之前,我们封装的数组属于静态数组,也即数组空间固定长度,对于固定长度的数组当元素超过容量时会报数组空间不足.为了能更好的使用数组,我们来实现一个可以自动扩充容量的数组. 实现思路: 1.当数组容量达到事先定义值时创建一个空间是data数组两倍的newData数组(扩容): 2.把data数组中的元素全部赋值到newData数组中: 3.把data数组重新执行newData数组. 一.定义核心扩容方法 /

随机推荐