desislava_topuzakova

ArrayList.cs

May 24th, 2020
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6.  
  7. namespace ArrayList
  8. {
  9. public class ArrayList<Т> : IEnumerable<T>
  10. {
  11. //полета: елементи, брой
  12. private T [] elements;
  13. private int capacity = 2;
  14.  
  15. //конструктор
  16. public ArrayList()
  17. {
  18. elements = new T[capacity];
  19. }
  20.  
  21. //get и set -> по индекс от elements
  22. public T this[int index]
  23. {
  24. get
  25. {
  26. if (index >= capacity)
  27. {
  28. throw new ArgumentOutOfRangeException();
  29. }
  30. return elements[index];
  31. }
  32. set
  33. {
  34. if (index >= capacity)
  35. {
  36. throw new ArgumentOutOfRangeException();
  37. }
  38. elements[index] = value;
  39. }
  40. }
  41.  
  42. public int Capacity
  43. {
  44. get
  45. {
  46. return capacity;
  47. }
  48. set
  49. {
  50. capacity = value;
  51. }
  52. }
  53.  
  54. //свойства
  55. private void Resize()
  56. {
  57. T[] resize = new T[elements.Length * 2];
  58. //1. прехвърлим всички елементи от elements -> resize
  59. //2. elements = resize
  60. for (int index = 0; index < elements.Length; index++)
  61. {
  62. resize[index] = elements[index];
  63. }
  64.  
  65. elements = resize;
  66.  
  67. }
  68.  
  69. private void Shrink()
  70. {
  71. T[] resize = new T[elements.Length / 2];
  72. //1. прехвърлим всички елементи от elements -> resize
  73. //2. elements = resize
  74. for (int index = 0; index < elements.Length; index++)
  75. {
  76. resize[index] = elements[index];
  77. }
  78.  
  79. elements = resize;
  80.  
  81. }
  82.  
  83. public void Add(Т element)
  84. {
  85. //да нямаме място
  86. if (elements.Length == Capacity)
  87. {
  88. Resize();
  89. }
  90.  
  91. //да имаме свободно място
  92. this.elements[this.Capacity++] = element;
  93.  
  94. }
  95.  
  96. public void Shift(int index)
  97. {
  98. for (int i = index; i < elements.Length; i++)
  99. {
  100. elements[i] = elements[i + 1];
  101. }
  102. }
  103.  
  104. public T RemoveAt(int index)
  105. {
  106. if(index >= elements.Length)
  107. {
  108. throw new ArgumentOutOfRangeException();
  109. }
  110.  
  111. T elementToRemove = elements[index];
  112. Shift(index);
  113. Capacity--;
  114.  
  115. return elementToRemove;
  116.  
  117. }
  118.  
  119. IEnumerator<T> IEnumerable<T>.GetEnumerator()
  120. {
  121. throw new NotImplementedException();
  122. }
  123.  
  124. IEnumerator IEnumerable.GetEnumerator()
  125. {
  126. throw new NotImplementedException();
  127. }
  128. }
  129.  
  130. public class T
  131. {
  132. }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment