概念:把数据码成一排进行存放。
代码:

  1. package com.company;
  2. public class Array<泛型> {
  3. private 泛型[] data;
  4. private int size;
  5. public Array(int capacity){
  6. data = (泛型[])new Object[capacity];
  7. size = 0;
  8. }
  9. public Array(){
  10. this(10);
  11. }
  12. //返回数组里的当前最大下标值
  13. public int getSize(){
  14. return size;
  15. }
  16. //返回数组内容个数
  17. public int getCapacity(){
  18. return data.length;
  19. }
  20. //判断数组是否为空
  21. public boolean isEmpty(){
  22. return size == 0;
  23. }
  24. //向末尾添加
  25. public void addLast(泛型 e){
  26. this.add(size, e);
  27. }
  28. //在第一位插入
  29. public void addFirst(泛型 e){
  30. add(0, e);
  31. }
  32. //在某一位插入
  33. public void add(int index, 泛型 e){
  34. if (size == data.length){
  35. resize(2 * data.length);
  36. }
  37. if (index < 0 || index > size){
  38. throw new IllegalArgumentException("Add failed. Require index >= 0 and index <= size");
  39. }
  40. for (int i = size-1; i>= index ;i--){
  41. data[i+1] = data[i];
  42. }
  43. data[index] = e;
  44. size++;
  45. }
  46. //获取index索引位置的元素
  47. public 泛型 get(int index){
  48. if (index<0 || index>=size){
  49. throw new IllegalArgumentException("Get failed. Index is illegal");
  50. }
  51. return data[index];
  52. }
  53. //修改index索引位置的元素
  54. public void set(int index,泛型 e){
  55. if (index<0 || index>=size){
  56. throw new IllegalArgumentException("Set failed. Index is illegal");
  57. }
  58. data[index] = e;
  59. }
  60. //查看数组中是否有元素e
  61. public boolean contains(泛型 e){
  62. for(泛型 i : data){
  63. if (i.equals(e)){
  64. return true;
  65. }
  66. }
  67. return false;
  68. }
  69. //查找数组中元素e所在索引,如果不存在元素e,则返回-1
  70. public int find(泛型 e){
  71. for (int i = 0 ; i<size ; i++){
  72. if (data[i].equals(e)){
  73. return i;
  74. }
  75. }
  76. return -1;
  77. }
  78. //从数组中删除index位置的元素,返回删除的元素
  79. public 泛型 remove(int index){
  80. if (index<0 || index>=size){
  81. throw new IllegalArgumentException("Set failed. Index is illegal");
  82. }
  83. 泛型 ret = data[index];
  84. for (int i = index+1; i<size; i++){
  85. data[i-1] = data[i];
  86. }
  87. size--;
  88. //data[size] = null;
  89. if (size == data.length / 4 && data.length /2 != 0){
  90. resize(data.length / 2);
  91. }
  92. return ret;
  93. }
  94. //删除第一个元素,返回删除的元素
  95. public 泛型 removeFirst(){
  96. return remove(0);
  97. }
  98. //删除最后一个元素,返回删除的元素
  99. public 泛型 removeLast(){
  100. return remove(size-1);
  101. }
  102. //从数组中删除元素e
  103. public void removeElement(泛型 e){
  104. int index = find(e);
  105. if (index != -1){
  106. remove(index);
  107. }
  108. }
  109. @Override
  110. public String toString(){
  111. StringBuilder res = new StringBuilder();
  112. res.append(String.format("Array: size = %d , capacity = %d\n" ,size , data.length));
  113. res.append('[');
  114. for (int i = 0; i<size ;i++){
  115. res.append(data[i]);
  116. if (i != size-1){
  117. res.append(",");
  118. }
  119. }
  120. res.append("]");
  121. return res.toString();
  122. }
  123. private void resize(int newCapacity){
  124. 泛型[] newData = (泛型[]) new Object[newCapacity];
  125. for (int i = 0; i<size; i++){
  126. newData[i] = data[i];
  127. }
  128. data = newData;
  129. }
  130. }
  1. package com.company;
  2. public class Main {
  3. public static void main(String[] args) {
  4. /*静态数组:
  5. int[] arr = new int[10];
  6. for (int i : arr)
  7. System.out.println(i);
  8. System.out.println("--------------------------------------");
  9. int[] scores = new int[]{100, 99, 66};
  10. for (int i : scores)
  11. System.out.println(i);
  12. System.out.println("-------------------------------------------");
  13. scores[0] = 98;
  14. for (int i : scores)
  15. System.out.println(i);
  16. System.out.println("-------------------------------------------");*/
  17. //动态数组:
  18. Array<Integer> arr2 = new Array<>();
  19. for (int i=0; i<10; i++){
  20. arr2.addLast(i);
  21. }
  22. System.out.println(arr2);
  23. arr2.add(1, 100);
  24. System.out.println(arr2);
  25. arr2.remove(2);
  26. arr2.removeElement(4);
  27. arr2.removeElement(0);
  28. System.out.println(arr2);
  29. }
  30. }

一维数组

可以存放上千万个数据,并且这些数据类型是相同的。
声明数组格式:

  1. //方式一:
  2. int a[];
  3. a = new int[3];
  4. a[0] = 0;
  5. a[1] = 1;
  6. a[2] = 2;
  7. //方式二:
  8. int a[] = new int[3];
  9. a[0] = 0;
  10. a[1] = 1;
  11. a[2] = 2;
  12. //方式三:
  13. int a[] = {0 , 1, 2};

相关的API方法

拷贝

  1. public class ShuZuKaoBei {
  2. public static void main(String[] args) {
  3. int a1[] = {1,2,3,4,5};
  4. int a2[] = {9,8,7,6,5,4,3};
  5. System.arraycopy(a1, 0, a2, 0, 3);//执行数组拷贝的操作
  6. System.out.print("a1数组中的内容:");
  7. for (int a : a1) {
  8. System.out.print(a + " ");
  9. }
  10. System.out.println();
  11. System.out.print("a2数组中的内容:");
  12. for (int a : a2) {
  13. System.out.print(a + " ");
  14. }
  15. System.out.println("\n 数组拷贝完成!");
  16. }
  17. }
  18. //输出内容:
  19. a1数组中的内容:1 2 3 4 5
  20. a2数组中的内容:1 2 3 6 5 4 3
  21. 数组拷贝完成!

System.arraycopy(source,0,dest,0,x):
复制源数组从下标0开始的x个元素到目标数组,从目标数组的下标0所对应的位置开始存取。

排序

  1. public class ShuZuPaiXu{
  2. public static void main(String[] args){
  3. int a[] = {4,32,45,32,65,32,2};
  4. System.out.print("数组排序前的顺序:");
  5. for (int aa : a){
  6. System.out.print(a + " ");
  7. }
  8. Arrays.sort(a);//数组的排序方法
  9. System.out.print("\n 数组排序后的顺序");
  10. for (int aa : a){
  11. System.out.print(a + " ");
  12. }
  13. }
  14. }
  15. //输出内容:
  16. 数组排序前的顺序:4 32 45 32 65 32 2
  17. 数组排序后的顺序:2 4 32 32 32 45 65

Arrays.sort(数组名):
数组的排序方法,在java.util包里,使用的时候需要先导入。