Реализация свойства Count коллекции Collection

313
07 сентября 2017, 15:53

Делаю свою реализацию коллекции на основе массива. Наследуюсь от шаблонного интерфейса Collection.

Проблемы с реализацией свойства Count. Я сделал так:

    public int Count
    {
        get
        {
            int counter = 0;
            while (array[counter] != null)
                counter++;
            return counter;
        }
    }

Мне же указали, что она является не очень правильной

Answer 1
  1. Для того, чтобы обратиться к существующей коллекции по индексу, нужно знать максимальное значение индекса. Иначе произойдёт исключение при выходе за границу коллекции.

  2. Максимальный индекс коллекции вы можете спросить у самой коллекции. Это её свойство .Count (или .Length, если это массив). Ну и раз у вас есть длина, ничего не нужно вычислять.

  3. Вы ухитрились реализовать операцию необычайно неэффективным способом: вы перебираете все элементы! Такой ужасный способ работает на сишных строках, потому что (а) в сишной строке гарантированно есть финальный нулевой элемент, и промежуточных нулевых элементов нет, и (б) другого, эффективного способа найти длину сишной строки нет. Но для высокоуровневых коллекций вы должны использовать быстрые методы.

  4. Если в вашей реализации длина массива не обязательно равна длине коллекции, заведите поле count, содержащее реальную длину коллекции, и поддерживайте его в правильном состоянии. От коллекций ожидается, что опрос длины происходит за O(1) (то есть, скорость не зависит от числа элементов).

READ ALSO
Как вставить данные в поле input в WPF?

Как вставить данные в поле input в WPF?

Как вставить данные в поля страницы и их отсабмитить, но без селениума

271
как принимать предложения обмена в стим (оффлайн трейды) C#

как принимать предложения обмена в стим (оффлайн трейды) C#

Начал работать из стим API, могу получить полный список трейдов (входящих и тех что от меня), но вот как принимать их разобраться не могуНашел...

264
DataGridComboBoxColumn с разным набором items

DataGridComboBoxColumn с разным набором items

Имеется DataGrid, в нем несколько колонок и 1 DataGridComboBoxColumn, хотелось бы для каждого DataGridComboBoxColumn видеть различный набор элементов Xaml

245