Guest User

Untitled

a guest
Jan 20th, 2019
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.43 KB | None | 0 0
  1. package education
  2.  
  3. import java.util.*
  4. import kotlin.test.assertEquals
  5. import kotlin.test.assertFalse
  6. import kotlin.test.assertTrue
  7.  
  8. /**
  9. * Date: 1/13/2019
  10. * Time: 20:49
  11. */
  12. fun main()
  13. {
  14. val myList = MyList("bar", "baz", "bar")
  15. assertFalse(myList.isEmpty())
  16. assertEquals(myList.size, 3)
  17. assertFalse(myList.contains("foo"))
  18. assertTrue(myList.contains("bar"))
  19. assertFalse(myList.containsAll(listOf("foo", "bar")))
  20. assertTrue(myList.containsAll(listOf("bar", "baz")))
  21. assertEquals(myList.indexOf("foo"), -1)
  22. assertEquals(myList.indexOf("bar"), 0)
  23. assertEquals(myList.lastIndexOf("foo"), -1)
  24. assertEquals(myList.lastIndexOf("bar"), 2)
  25. myList.addAll(2, listOf("owl", "bowl"))
  26. printList(myList)
  27. }
  28.  
  29. class MyList<E>(vararg elements: E) : MutableList<E> {
  30. private var elements: Array<E> = Arrays.copyOf(elements, elements.size)
  31.  
  32. private fun ensureCapacity(newSize: Int) {
  33. if (newSize > elements.size)
  34. elements = Arrays.copyOf(elements, Math.max(elements.size * 2, newSize))
  35. }
  36.  
  37. override fun add(element: E): Boolean {
  38. ensureCapacity(size + 1)
  39. elements[this.size] = element
  40. this.size++
  41. return true
  42. }
  43.  
  44. override fun add(index: Int, element: E) {
  45. if (index < 0 || index > this.size)
  46. throw IndexOutOfBoundsException()
  47.  
  48. ensureCapacity(this.size + 1)
  49. if (index < this.size) {
  50. for (i in this.size - 1 downTo index)
  51. this.elements[i + 1] = this.elements[i]
  52. }
  53. this.elements[index] = element
  54. this.size++
  55. }
  56.  
  57. override fun addAll(index: Int, elements: Collection<E>): Boolean {
  58. if (index < 0 || index > this.size)
  59. throw IndexOutOfBoundsException()
  60.  
  61. ensureCapacity(this.size + elements.size)
  62. if (index < this.size) {
  63. for (i in this.size - 1 downTo index)
  64. this.elements[i + elements.size] = this.elements[i]
  65. }
  66. var i = index
  67. for (e in elements)
  68. this.elements[i++] = e
  69. this.size += elements.size
  70. return true
  71. }
  72.  
  73. override fun addAll(elements: Collection<E>): Boolean = addAll(this.size, elements)
  74.  
  75. override fun clear() {
  76. this.size = 0
  77. }
  78.  
  79. override fun remove(element: E): Boolean {
  80. TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
  81. }
  82.  
  83. override fun removeAll(elements: Collection<E>): Boolean {
  84. TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
  85. }
  86.  
  87. override fun removeAt(index: Int): E {
  88. TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
  89. }
  90.  
  91. override fun retainAll(elements: Collection<E>): Boolean {
  92. TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
  93. }
  94.  
  95. override fun set(index: Int, element: E): E {
  96. val oldValue = elements[index]
  97. elements[index] = element
  98. return oldValue
  99. }
  100.  
  101. override var size: Int = elements.size
  102. private set
  103.  
  104. override fun contains(element: E): Boolean = indexOf(element) != -1
  105.  
  106. override fun containsAll(elements: Collection<E>): Boolean = elements.all { contains(it) }
  107.  
  108. override fun get(index: Int): E = elements[index]
  109.  
  110. override fun indexOf(element: E): Int = elements.indexOf(element)
  111.  
  112. override fun isEmpty(): Boolean = size == 0
  113.  
  114. override fun iterator(): MutableIterator<E> = MyIterator(elements, size)
  115.  
  116. override fun lastIndexOf(element: E): Int = elements.lastIndexOf(element)
  117.  
  118. override fun listIterator(): MutableListIterator<E> = mutableListOf(*elements).listIterator()
  119.  
  120. override fun listIterator(index: Int): MutableListIterator<E> = mutableListOf(*elements).listIterator(index)
  121.  
  122. override fun subList(fromIndex: Int, toIndex: Int): MutableList<E> = mutableListOf(*elements).subList(fromIndex, toIndex)
  123.  
  124. class MyIterator<E>(private val elements: Array<E>, private val size: Int) : MutableIterator<E> {
  125. override fun remove() {
  126. TODO("not implemented")
  127. }
  128.  
  129. private var currentIndex = 0
  130. override fun hasNext() = currentIndex < size
  131.  
  132. override fun next(): E = elements[currentIndex++]
  133. }
  134. }
  135.  
  136.  
  137. fun <E> concat(list: MutableList<E>, otherList: List<E>) {
  138. for (el in otherList)
  139. list.add(el)
  140. }
  141.  
  142. fun <E> printList(l: List<E>)
  143. {
  144. for (item in l)
  145. println(item)
  146. }
Add Comment
Please, Sign In to add comment