好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

?

1

2

3

4

5

6

public static <T> T[] dilatationArray(T[] datas, int newlen) {

  //不能为负数

  newlen = newlen< 0 ? 0 :newlen;

  //生成一个新数组,并copy原值到新数组

  return Arrays.copyOf(datas, newlen);

  }

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

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>

 

?

1

2

3

4

5

6

7

8

9

10

11

/**

  * @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类:点我跳转

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

/**

  * @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栈

 

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

/**

  * @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);

  }

}

输出结果

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

原文链接:https://blog.csdn.net/qq_42043982/article/details/91490690

查看更多关于java 实现数组扩容与缩容案例的详细内容...

  阅读:12次