1
+ /* *
2
+ * Created by gazollajunior on 08/04/16.
3
+ */
4
+
5
+ class OrderedSet <T : Comparable <T >>(list : MutableList <T >){
6
+
7
+ var items: MutableList <T > = list
8
+
9
+ fun insert (element : T ) {
10
+ if (exists(element)) {
11
+ return
12
+ }
13
+ for (i in 0 .. this .items.count() - 1 ){
14
+ if (this .items[i] > element){
15
+ this .items.add(i, element)
16
+ return
17
+ }
18
+ }
19
+ this .items.add(element)
20
+ }
21
+
22
+ /* *
23
+ * Use binarySearch algorithm to find the position for the new element in array
24
+ */
25
+
26
+ fun findElementPosition (element : T ):Int? {
27
+ var rangeStart = 0
28
+ var rangeEnd = this .items.count()
29
+ while (rangeStart < rangeEnd) {
30
+ val midIndex = rangeStart + (rangeEnd - rangeStart)/ 2
31
+ if (this .items[midIndex] == element) {
32
+ return midIndex
33
+ } else if (this .items[midIndex] < element){
34
+ rangeStart = midIndex + 1
35
+ } else {
36
+ rangeEnd = midIndex
37
+ }
38
+ }
39
+ return null
40
+ }
41
+
42
+ override fun toString ():String = this .items.toString()
43
+
44
+ fun isEmpty ():Boolean = this .items.isEmpty()
45
+
46
+ fun exists (element : T ):Boolean = findElementPosition(element) != null
47
+
48
+ fun count ():Int = this .items.count()
49
+
50
+ fun remove (element : T ) {
51
+ val position = findElementPosition(element)
52
+ if (position != null ) {
53
+ this .items.removeAt(position)
54
+ }
55
+ }
56
+
57
+ fun removeAll () = this .items.removeAll(this .items)
58
+
59
+ fun max ():T ? {
60
+ if (count() != 0 ) {
61
+ return this .items[count() - 1 ]
62
+ } else {
63
+ return null
64
+ }
65
+ }
66
+ fun min ():T ? {
67
+ if (count() != 0 ) {
68
+ return this .items[0 ]
69
+ } else {
70
+ return null
71
+ }
72
+ }
73
+ }
74
+
75
+
76
+
77
+ fun main (args : Array <String >) {
78
+
79
+
80
+ println (" \n Original set:" )
81
+ val names = mutableListOf<String >(" Demetrius" )
82
+
83
+ var nameSet = OrderedSet <String >(names)
84
+ println (nameSet)
85
+
86
+
87
+ val n1 = " Adam"
88
+ println (" \n Adding ${n1} to the list:" )
89
+ nameSet.insert(n1)
90
+ println (nameSet)
91
+
92
+ val n2 = " Tim"
93
+ println (" \n Adding ${n2} to the list:" )
94
+ nameSet.insert(n2)
95
+ println (nameSet)
96
+
97
+ val n3 = " Zack"
98
+ println (" \n Adding ${n3} to the list:" )
99
+ nameSet.insert(n3)
100
+ println (nameSet)
101
+
102
+ val n4 = " Zack"
103
+ println (" \n Try Add ${n4} again to the list:" )
104
+ nameSet.insert(n4)
105
+ println (nameSet)
106
+
107
+ nameSet.remove(n2)
108
+ println (" \n Removing ${n2} from the list:" )
109
+ println (nameSet)
110
+
111
+ nameSet.remove(n4)
112
+ println (" \n Removing ${n4} from the list:" )
113
+ println (nameSet)
114
+
115
+ nameSet.remove(n1)
116
+ println (" \n Removing ${n1} from the list:" )
117
+ println (nameSet)
118
+
119
+ }
0 commit comments