實現一個簡略ArrayList, 提供 add(), remove(), size()

實現一個簡略ArrayList, 提供 add(), remove(), size()

沒有考慮太多方面,還請批評指正。

接口定義

  1. import java.io.Serializable;
  2. public interface PArrayListI<T> extends Serializable{
  3. public int add(T t);
  4. public int remove(T t);
  5. public T remove(int index);
  6. public long size();
  7. public T get(int index);
  8. }

List類的實現

  1. public class PArrayList<T> implements PArrayListI<T>{
  2. private static final int Inital_Size =10;
  3. private transient int size;
  4. private transient int eleCount;
  5. private transient float growFactor =0.5F;
  6. private transient Object[] array;
  7. public PArrayList() {
  8. this.array = new Object[Inital_Size];
  9. this.size = this.array.length;
  10. }
  11. public PArrayList( int size) {
  12. this.size = size;
  13. this.array = new Object[size];
  14. }
  15. public PArrayList( int size, float growFactor) {
  16. this.size = size;
  17. this.growFactor = growFactor;
  18. this.array = new Object[size];
  19. }
  20. @Override
  21. public int add(Object t) {//添加一個元素
  22. if(capacityIsEnough()){
  23. eleCount+=1;
  24. this.array[eleCount-1]= t;
  25. return 1;
  26. }else{
  27. growUp();
  28. add(t);
  29. }
  30. return 0;
  31. }
  32. @Override
  33. public int remove(Object t) { // 移除一個元素
  34. if (eleCount <= 0 || size <= 0 ) {
  35. return 0;
  36. }
  37. int index = indexOf(t);
  38. if (index<0) {//不存在
  39. return 0;
  40. }else{
  41. removeByIndex(index);
  42. eleCount-=1;
  43. return 1;
  44. }
  45. }
  46. @Override
  47. public long size() {
  48. return eleCount;
  49. }
  50. @Override
  51. public T get(int index) { //根據座標獲取
  52. T t = (T) this.array[index];
  53. return t;
  54. }
  55. @Override
  56. public T remove(int index) { //對外暴露的根據座標移除
  57. T t = get( index);
  58. removeByIndex(index);
  59. eleCount--;
  60. return t;
  61. }
  62. private boolean capacityIsEnough(){ //是否需要擴容
  63. if (eleCount<this.array.length) {
  64. return true;
  65. }
  66. return false;
  67. }
  68. private void growUp(){ //擴容執行函數
  69. int newSize= Math.round(this.size*(1+growFactor));
  70. Object[] newArrya = new Object[newSize];
  71. int i=0;
  72. for (Object object : this.array) {
  73. newArrya[i++] = object;
  74. }
  75. }
  76. private int indexOf(Object t){ // 獲取對象的座標
  77. int index = -1;
  78. if (t==null) {
  79. int i = 0;
  80. for (Object object : array) {
  81. i++;
  82. if (object == null) {
  83. if (i <0 || i >eleCount)
  84. return -1;
  85. return i;
  86. }
  87. }
  88. }else{
  89. int i = 0;
  90. for (Object object : array) {
  91. if (t.equals(object)) {
  92. if (i <0 || i >eleCount)
  93. return -1;
  94. return i;
  95. }
  96. i++;
  97. }
  98. }
  99. return index ;
  100. }
  101. int removeByIndex(int index){ //根據座標移除
  102. if (index == eleCount-1) {//最後一個元素
  103. array[index]=null;
  104. }
  105. System.arraycopy(array, index+1, array,index , eleCount-index);//-1
  106. return 1;
  107. }
  108. }

測試類

  1. public class TestSystemArrayCopy {
  2. public static void main(String[] args) {
  3. PArrayListI<User> list = new PArrayList<User>();
  4. User user1 = new User(1);
  5. list.add(user1);
  6. list.add(new User(2));
  7. list.add(new User(3));
  8. list.add(new User(4));
  9. list.add(new User(5));
  10. list.add(new User(6));
  11. User user7 = new User(7);
  12. list.add(user7);
  13. System.out.println("removed user:: "+list.remove(0));
  14. list.remove(user7);
  15. for (int i =0;i<list.size() ; i++) {
  16. System.out.println(list.get(i).toString());
  17. }
  18. System.out.println("size: "+list.size());
  19. }
  20. }

輸出結果:

  1. removed user:: User [id=1, name=null, age=0, money=0.0, gender=0]
  2. User [id=2, name=null, age=0, money=0.0, gender=0]
  3. User [id=3, name=null, age=0, money=0.0, gender=0]
  4. User [id=4, name=null, age=0, money=0.0, gender=0]
  5. User [id=5, name=null, age=0, money=0.0, gender=0]
  6. User [id=6, name=null, age=0, money=0.0, gender=0]
  7. size: 5
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章