线性表(数组 链表 栈 队列 哈希表):具有n个相同类型元素的有序序列;

    1. package com.ay;
    2. import javafx.beans.binding.ObjectExpression;
    3. public class ArrayList<E> {
    4. public int size;
    5. private E[] elements; //所有的元素
    6. private static final int DEFAULT_CAPACITY = 10;
    7. private static final int ELEMENT_NOT_FOUND = -1;
    8. //构造方法
    9. public ArrayList(int capaticy){
    10. if (capaticy<DEFAULT_CAPACITY){
    11. capaticy = DEFAULT_CAPACITY;
    12. }else{
    13. capaticy = capaticy;
    14. }
    15. elements = (E[]) new Object[capaticy];
    16. }
    17. public void rangeCheck(int index){
    18. if (index<0 || index>= size){
    19. throw new IndexOutOfBoundsException("Index: "+index + "But Size :"+size);
    20. };
    21. }
    22. public void rangeCheckForAdd(int index){
    23. if (index<0 || index> size){
    24. throw new IndexOutOfBoundsException("Index: "+index + "But Size :"+size);
    25. };
    26. }
    27. public void add(E element){
    28. add(size,element);
    29. }
    30. public void add(int index,E element){
    31. rangeCheckForAdd(index);
    32. ensureCapacity(size+1);
    33. for (int i = size-1; i >= index ; i--) {
    34. elements[i+1] = elements[i];
    35. }
    36. elements[index] = element;
    37. size ++;
    38. }
    39. public ArrayList(){
    40. //elements = new int[DEFAULT_CAPACITY];
    41. this(DEFAULT_CAPACITY); //调用有参数的构造方法
    42. }
    43. public boolean isEmpty(){
    44. return size==0;
    45. }
    46. public E get(int index){
    47. rangeCheck(index);
    48. return elements[index];
    49. }
    50. public E set(int index,E element){
    51. rangeCheck(index);
    52. E old = elements[index];
    53. elements[index] = element;
    54. return old;
    55. }
    56. /**
    57. * 查看元素索引
    58. * @param element
    59. * @return index
    60. */
    61. public int indexOf(E element){
    62. for (int i = 0; i < size; i++) {
    63. if (elements[i]==element) return i;
    64. }
    65. return ELEMENT_NOT_FOUND;
    66. }
    67. /**
    68. * 是否包含某个元素
    69. * @param element
    70. * @return boolean
    71. */
    72. public boolean contains(E element){
    73. return indexOf(element) != ELEMENT_NOT_FOUND;
    74. }
    75. // 清楚所有元素
    76. /**
    77. * 控制size为0即可,无需清空
    78. */
    79. public void clear(){
    80. for (int i = 0; i < size; i++) {
    81. elements[i] = null;
    82. }
    83. size = 0;
    84. }
    85. // java中 打印对象会默认调用 对象.toString() 重写该方法
    86. public String toString(){
    87. // 拼接字符串
    88. StringBuilder string = new StringBuilder();
    89. string.append("size=").append(size).append(" [");
    90. for (int i = 0; i < size; i++) {
    91. string.append(elements[i]);
    92. if(i!=size-1){
    93. string.append(",");
    94. }
    95. }
    96. string.append("]");
    97. return string.toString();
    98. }
    99. public E remove(int index){
    100. rangeCheck(index);
    101. // for (int i = 0; i < size; i++) {
    102. // if (i>index){
    103. // elements[i-1] = elements[i];
    104. // }
    105. // }
    106. E old = elements[index];
    107. for (int i = index+1; i <size ; i++) {
    108. elements[i-1] = elements[i];
    109. }
    110. size --;
    111. elements[size]=null;
    112. return old;
    113. }
    114. Integer
    115. /**
    116. * 保证要有capacity的容量
    117. * @param capacity
    118. */
    119. private void ensureCapacity(int capacity){
    120. int oldCapacity = elements.length;
    121. if (oldCapacity>=capacity){
    122. return;
    123. }
    124. // 新容量为旧容量的1.5倍
    125. int newCapacity = oldCapacity + (oldCapacity>>1);
    126. E[] newElements = (E[]) new Object[newCapacity];
    127. for (int i =0;i<size;i++){
    128. newElements[i] = elements[i];
    129. }
    130. elements = newElements;
    131. System.out.println("扩容");
    132. }
    133. }
    1. package com.ay;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Main.test2();
    5. }
    6. // 测试person对象 添加到数组
    7. public static void test2(){
    8. Person xiaoming = new Person("xiaoming",14);
    9. Person xiaohong = new Person("xiaohong",30);
    10. // Person xiaohong = new Person("xiaohong",30);
    11. ArrayList<Person> arrayList = new ArrayList<>();
    12. arrayList.add(xiaoming);
    13. arrayList.add(xiaohong);
    14. arrayList.add(xiaohong);
    15. arrayList.add(xiaohong);
    16. System.out.println(arrayList);
    17. arrayList.clear();
    18. System.out.println(arrayList);
    19. //提醒jvm去做垃圾回收
    20. System.gc();
    21. }
    22. public static void test1(){
    23. ArrayList<Integer> arrayList = new ArrayList<>();
    24. arrayList.add(100);
    25. arrayList.add(10);
    26. arrayList.add(200);
    27. arrayList.add(300);
    28. for (int i=0;i<30;i++){
    29. arrayList.add(i);
    30. }
    31. System.out.println(arrayList);
    32. }
    33. }