Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
ArrayList
Класс ArrayList представляет коллекцию объектов. И если надо сохранить вместе разнотипные объекты - строки, числа и т.д., то данный класс как раз для этого подходит. Рассмотрим пример.
using System;
using System.Collections;
namespace ConsoleArrayList
{
class Program
{
static void Main(string[] args)
{
ArrayList list = new ArrayList();
// Заносим в список объект типа double.
list.Add(2.3);
// заносим в список объект типа int.
list.Add(55);
// Заносим в список строковый массив.
list.AddRange(new string[] { "Hello", "world" });
Console.WriteLine("Список после занесения элементов:");
// Пперебор значений.
foreach (object o in list)
{
Console.WriteLine(o);
}
// Удаляем первый элемент.
list.RemoveAt(0);
// переворачиваем список.
list.Reverse();
// Получение элемента по индексу.
Console.WriteLine(list[0]);
Console.WriteLine("Список после модификации:");
// Перебор значений.
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
Console.ReadLine();
}
}
}
Во-первых, так как класс ArrayList находится в пространстве имен System.Collections, то подключаем его (using System.Collections;).
Вначале создаем объект коллекции, используя конструктор, как объект любого другого класса:
ArrayList list = new ArrayList();
При необходимости мы могли бы так же, как и с массивами, выполнить начальную инициализацию коллекции, например,
ArrayList list = new ArrayList(){1, 2, 5, "string", 7.7};
Далее последовательно добавляем разные значения. Данный класс коллекции, как и большинство других коллекций, имеет два способа добавления: одиночного объекта через метод Add и набора объектов, например, массива или другой коллекции через метод AddRange
Благодаря тому, что в классе ArrayList реализован интерфейс IEnumerable, мы можем пройтись по всем объектом, хранящимся в списке, через цикл foreach. И поскольку данная коллекция хранит разнородные объекты, а не только числа или строки, то в качестве типа перебираемых объектов выбран тип object:
foreach (object o in list)
Многие коллекции, в том числе и ArrayList, реализуют удаление с помощью методов Remove/RemoveAt. В данном случае мы удаляем первый элемент, передавая в метод RemoveAt индекс удаляемого элемента.
В завершении мы опять же выводим элементы коллекции на экран только уже через цикл for. В данном случае с перебором коллекций дело обстоит так же, как и с массивами. А число элементов коллекции мы можем получить через свойство Count
С помощью индексатора мы можем получить по индексу элемент коллекции так же, как и в массивах:
object firstObj = list[0];
Для использования элементов списка в соответствии с типом их значений, при извлечении из списка значение элемента необходимо привести к его типу явно:
using System;
using System.Collections;
namespace Example_2
{
class Program
{
static void Main(string[] args)
{
ArrayList l = new ArrayList() { 1, 2, 3, 4, 5 };
//Приведение элемента списка к его типу.
int i = (int)l[4];
Console.WriteLine("i = " + i);
int s = 0;
foreach (object x in l) s += (int)x;
Console.WriteLine("s = " + s);
}
}
}
Список List
Класс List представляет простейший список однотипных объектов типа Т. Тип объектов задаётся при описании переменной. В качестве типа элементов списка можно выбрать любой тип C#.
Среди его методов можно выделить следующие:
• void Add(T item): добавление нового элемента в список
• void AddRange(ICollection collection): добавление с список коллекции или массива
• int BinarySearch(T item): бинарный поиск элемента в списке. Если элемент найден, то метод возвращает индекс этого элемента в коллекции. При этом список должен быть отсортирован.
• int IndexOf(T item): возвращает индекс первого вхождения элемента в списке
• void Insert(int index, T item): вставляет элемент item в списке на позицию index
• bool Remove(T item): удаляет элемент item из списка, и если удаление прошло успешно, то возвращает true
• void RemoveAt(int index): удаление элемента по указанному индексу index
• void Sort(): сортировка списка
Свойства
Capacity
Возвращает или задает общее число элементов, которые может вместить внутренняя структура данных без изменения размера.
Count
Получает число элементов, содержащихся в интерфейсе List.
Item[Int32]
Возвращает или задает элемент по указанному индексу.
Посмотрим реализацию списка на примере:
using System;
using System.Collections.Generic;
namespace Example_1
{
class Person
{
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
//Создание списка целых чисел и инициализация его значениями.
List numbers = new List() { 1, 2, 3, 45 };
// Добавление элемента.
numbers.Add(6);
// Добавление диапазона.
numbers.AddRange(new int[] { 7, 8, 9 });
// Вставляем на первое место в списке число 123.
numbers.Insert(0, 123);
// Удаляем второй элемент.
numbers.RemoveAt(1);
foreach (int i in numbers)
{
Console.WriteLine(i);
}
//Создаём список из трёх объектов класса Person.
List people = new List(3);
Console.WriteLine("Count = {0}, Capacity = {1}", people.Count, people.Capacity);
people.Add(new Person() { Name = "Иван" });
people.Add(new Person() { Name = "Пётр" });
foreach (Person p in people)
{
Console.WriteLine(p.Name);
}
Console.ReadLine();
}
}
}
Во-первых, так как класс List<> находится в пространстве имен System.Collections.Generic, то подключаем его (using System.Collections.Generic;).
Здесь у нас создаются два списка: один для объектов типа int, а другой - для объектов Person. В первом случае мы выполняем начальную инициализацию списка: List numbers = new List() { 1, 2, 3, 45 };
Во втором случае мы используем другой конструктор, в который передаем начальную емкость списка: List people = new List(3);. Указание начальной емкости списка (capacity) позволяет в будущем увеличить производительность и уменьшить издержки на выделение памяти при добавлении элементов. Также начальную емкость можно установить с помощью свойства Capacity, которое имеется у класса List.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleList
{
class Program
{
static void Main(string[] args)
{
List L = new List { 1, 8, 3, 7 };
foreach (int x in L)
Console.Write("\t"+x);
Console.WriteLine();
L.Sort();
foreach (int x in L)
Console.Write("\t" + x);
Console.WriteLine();
L.Reverse();
foreach (int x in L)
Console.Write("\t" + x);
Console.WriteLine();
L.Add(9);
foreach (int x in L)
Console.Write("\t" + x);
Console.WriteLine();
L.RemoveAt(2);
foreach (int x in L)
Console.Write("\t" + x);
Console.WriteLine();
}
}
}