Kolekcije su uglavnom povezane za rad sa podacima koji potiču iz baza podataka, klasa ili drugih datoteka; često su isprepletene sa drugim programerskim aktivnostima poput taskova, događaja, delegata ili jednostavno služe da ispune neku kontrolu u programima sa grafičkim okruženjem; poput ListBox-a ili ComboBox-a; ali u jedno možete biti sigurni; gde su kolekcije tu su i podaci i kad manipulišete sa podacima vi to jednostavno radite preko kolekcija.

Uglavnom, sve što važi za generike to važi i za generičke liste. Sve generičke liste se nalaze u imenskom prostoru System.Collection.Generic; sve su parametorizovane kako bi izbegle boxing i unboxing objekata i kad radite sa generičkim listama tada radite sa tipom podataka koje ste definisali; svi elementi u kolekciji moraju da imaju isti tip podataka; i sve generičke liste su takođe safe type.

Znači, generičke liste koristite kada znate koji tip podataka hoćete da koristi vaša lista i kad hoćete da svaki elemenat u kolekciji bude istog tipa.


Generička kolekcija List<>


Najčešće korišćena generička kolekcija u programiranju je definitivno generička lista List<> zbog svoje jednostavnosti. Ona predstavlja listu elemenata kojoj možete pristupiti preko indeksa dok vam u isto vreme obezbeđuje mnoštvo metoda za sortiranje, traženje itd; iako se najčešće u programiranju listom jednostavno manipuliše kako vama odgovara. Jednostavno nadjačate neke metode u vašoj klasi objekta korisnim interfejsima koje će se odraziti na listu. Pogledajte sledeći primer, koji ću da malo zakomplikujem čisto da bi ste videli kako se može manipulisati listom prema vlastitim potrebama.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ListGenericCollection
{

public class Student : IEquatable<Student> , IComparable<Student>
{
public int ID { get; set; }
public string Name { get; set; }

public override string ToString() => "ID: " + ID + " Name: " + Name;

public override bool Equals(object obj)
{
if (obj == null) return false;
Student objAsStudent = obj as Student;
if (objAsStudent == null) return false;
else return Equals(objAsStudent);

}

public int CompareTo(Student student) => this.Name.CompareTo(student.Name);

public override int GetHashCode() => ID;

public bool Equals(Student other)
{
if (other == null) return false;
return (this.ID.Equals(other.ID));

}
}

class Program
{
static void Main(string[] args)
{
List<Student> students = new List<Student>();

students.Add(new Student { ID = 10, Name = "Manuel Radovanovic" });
students.Add(new Student { ID = 41, Name = "Ella Napolis" });
students.Add(new Student { ID = 37, Name = "Martine Moore" });
students.Add(new Student { ID = 55, Name = "Charles Junger" });
students.Add(new Student { ID = 23, Name = "Antoinete Amorros" });

Console.WriteLine("Sorted list of students:" + Environment.NewLine);

students.Sort();
Print(students);

Console.WriteLine("Insert a new student:" + Environment.NewLine);
students.Insert(students.Count, new Student() { ID = 28, Name = "Alice Cooper" });

students.Sort();
Print(students);

Console.WriteLine("Remove the third student from the list:" + Environment.NewLine);

students.RemoveAt(2);
Print(students);
Console.WriteLine("Press any key to continue...");
Console.ReadKey();

}

static void Print(List<Student> students)
{
foreach (Student student in students)
{
Console.WriteLine(student);

}

Console.WriteLine();

}
}
}

Ukoliko obratite pažnju na samu klasu Student, primetićete da smo pored nekih nadjačanih metoda dodali i interfejs IComparable<> kako bi smo omogućili listi students da sortira našu listu prema imenu studenata. Takođe u kodu se možete videti da novog studenta stavljamo na poziciju koju broji lista ili da uklanjamo studenta sa liste na osnovu poznatog reda na listi. Kad pokrenete navedeni program, rezultat će biti sledeći:

Sorted list of students:

ID: 23 Name: Antoinete Amorros
ID: 55 Name: Charles Junger
ID: 41 Name: Ella Napolis
ID: 10 Name: Manuel Radovanovic
ID: 37 Name: Martine Moore

Insert a new student:

ID: 28 Name: Alice Cooper
ID: 23 Name: Antoinete Amorros
ID: 55 Name: Charles Junger
ID: 41 Name: Ella Napolis
ID: 10 Name: Manuel Radovanovic
ID: 37 Name: Martine Moore

Remove the third student from the list:

ID: 28 Name: Alice Cooper
ID: 23 Name: Antoinete Amorros
ID: 41 Name: Ella Napolis
ID: 10 Name: Manuel Radovanovic
ID: 37 Name: Martine Moore

 ( izvor: www.manuelradovanovic.com  )

Last modified: Tuesday, 27 October 2020, 5:24 PM