public void Add(T item) { int pos = _list.BinarySearch(item, _comparer); int insertBefore = pos; if (insertBefore < 0) { insertBefore = ~insertBefore; } _list.Insert(insertBefore, item); }
/// <summary> /// BigList<T> (WITH DUPLICATES) /// Editable sequence of indexed items /// Like List<T> but provides /// Fast Insert / Delete operations (at any position) /// Fast Copy / Concat / Sub-range operations /// Implemented by the data structure "Rope" /// Special kind of balanced binary tree: http://en.wikipedia.org/wiki/Rope_(data_structure) /// </summary> private static void TestBigList() { BigList <Student> students = new BigList <Student>(); var student1 = new Student("First DUPLICATE", 21); var student2 = new Student("Second", 21); var student3 = new Student("Third", 22); var student4 = new Student("Forth", 23); var student5 = new Student("Fifth", 24); Console.WriteLine(); students.Add(student1); students.Add(student2); students.Add(student3); students.Add(student4); students.Add(student5); students.Add(student1); Console.WriteLine("===== BEFORE SORT ====="); Console.WriteLine("Index of student1: " + students.BinarySearch(student1)); Console.WriteLine("Index of student2: " + students.BinarySearch(student2)); Console.WriteLine("Index of student3: " + students.BinarySearch(student3)); Console.WriteLine("Index of student4: " + students.BinarySearch(student4)); Console.WriteLine("Index of student5: " + students.BinarySearch(student5)); foreach (var item in students) { Console.WriteLine(item); } students.Sort(); Console.WriteLine("===== AFTER SORT ====="); Console.WriteLine("Index of student1: " + students.BinarySearch(student1)); Console.WriteLine("Index of student2: " + students.BinarySearch(student2)); Console.WriteLine("Index of student3: " + students.BinarySearch(student3)); Console.WriteLine("Index of student4: " + students.BinarySearch(student4)); Console.WriteLine("Index of student5: " + students.BinarySearch(student5)); foreach (var item in students) { Console.WriteLine(item); } Console.WriteLine("===== INDEX students[3] ====="); Console.WriteLine(students[3]); }
/// <summary> /// BigList<T> (WITH DUPLICATES) /// Editable sequence of indexed items /// Like List<T> but provides /// Fast Insert / Delete operations (at any position) /// Fast Copy / Concat / Sub-range operations /// Implemented by the data structure "Rope" /// Special kind of balanced binary tree: http://en.wikipedia.org/wiki/Rope_(data_structure) /// </summary> private static void TestBigList() { BigList<Student> students = new BigList<Student>(); var student1 = new Student("First DUPLICATE", 21); var student2 = new Student("Second", 21); var student3 = new Student("Third", 22); var student4 = new Student("Forth", 23); var student5 = new Student("Fifth", 24); Console.WriteLine(); students.Add(student1); students.Add(student2); students.Add(student3); students.Add(student4); students.Add(student5); students.Add(student1); Console.WriteLine("===== BEFORE SORT ====="); Console.WriteLine("Index of student1: " + students.BinarySearch(student1)); Console.WriteLine("Index of student2: " + students.BinarySearch(student2)); Console.WriteLine("Index of student3: " + students.BinarySearch(student3)); Console.WriteLine("Index of student4: " + students.BinarySearch(student4)); Console.WriteLine("Index of student5: " + students.BinarySearch(student5)); foreach (var item in students) { Console.WriteLine(item); } students.Sort(); Console.WriteLine("===== AFTER SORT ====="); Console.WriteLine("Index of student1: " + students.BinarySearch(student1)); Console.WriteLine("Index of student2: " + students.BinarySearch(student2)); Console.WriteLine("Index of student3: " + students.BinarySearch(student3)); Console.WriteLine("Index of student4: " + students.BinarySearch(student4)); Console.WriteLine("Index of student5: " + students.BinarySearch(student5)); foreach (var item in students) { Console.WriteLine(item); } Console.WriteLine("===== INDEX students[3] ====="); Console.WriteLine(students[3]); }