locked
массив List Collection RRS feed

  • Вопрос

  • Вот скажите - есть массив,

    int [] asd = new int[];
    

    есть список

    List<int> asd = new List<int>();

    и есть коллекция

    ObservaribleCollection<int> asd = new ....

    Если не рассматривать количество выделяемой памяти и всякие автоматические обновления по сути это одно и то же? И все варианты работы тоже одинаковы для них (ну типа циклов и т.п.)

    Т.е. если это изобразить графически это будет так для всех трёх?

    1

    45

    3

    6

    234

    8

     

    И ещё в тему - массив многомерный

    int [int,string] asdm = new ....

    Это в List и ObservableCollection

    ObservableCollection<Tuple<int, string>> asdm = new ...

    И выглядит все три так:

    1    прав

    223     гшнрлд

    5     нгрл

    6786543453     проываыв

    Правильно?


     

     


    Спасибо

    18 марта 2013 г. 6:24

Ответы

  • Добрый день.

    В первом приближении, все эти три коллекции служат для хранения однотипных данных.

    Способ хранения у второй и третьей коллекции, там, глубоко внутри, у них на основе массива. Но они предоставляют разный функционал. Так, например, List и ObservableCollection позволяют добавлять элементы. Но, в связи с тем, что внутри у них массив, при его переполнении происходит выделение памяти под массив в два раза больше и происходит копирование элементов из старого массива в новый. В связи с чем, при интенсивном наполнении их данными, время от времени будут тормоза связанные с копирование.

    А вот по поводу двухмерных массивов, вы совершенно не правы. Во-первых, объявить массив как вы показали нельзя. Массив может хранить только элементы одного типа и то, он указан перед скобками. Т.е. объявляя массив:

    int[,] asdm = new int[10,20];

    Вы будите в нем хранить только int. Во втором же случае, у вас массив по прежнему одномерный, но каждый элемент, вместо значения, хранит ссылку на область памяти в кеоторой есть сторка и число.

    Как то так.


    18 марта 2013 г. 6:42
    Отвечающий