Generics Collections Why do we need Generics Another

  • Slides: 19
Download presentation
Generics Collections

Generics Collections

Why do we need Generics? Another method of software re-use. When we implement an

Why do we need Generics? Another method of software re-use. When we implement an algorithm, we want to re-use it for different types. Example: We write a generic method for sorting an array of objects, then call the generic method with an array of any type. The compiler performs type checking to ensure that the array passed to the sorting method contains only elements of the same type. Generics provide compile-time type safety.

Generic Methods Generic methods enable you to specify, with a single method declaration, a

Generic Methods Generic methods enable you to specify, with a single method declaration, a set of related methods. Example: Overloaded. Methods. cs • Note that the array element type (int, double or char) appears only once in each method—in the method header. • If we replace the element types in each method with a generic name then all three methods would look like follows: private static void Display. Array( T[] input. Array ) { foreach ( T element in input. Array ) Console. Write( element + " " ); Console. Write. Line( "n" ); } However, it will not compile, because its syntax is not correct. Generic. Methods. cs

Generic Methods All generic method declarations have a type-parameter list delimited by angle brackets

Generic Methods All generic method declarations have a type-parameter list delimited by angle brackets that follows the method’s name. Each type-parameter list contains one or more type parameters. A type parameter is an identifier that is used in place of actual type names. The type parameters can be used to declare the return type, the parameter types and the local variable types in a generic method declaration. Type parameters act as placeholders for type arguments that represent the types of data that will be passed to the generic method. A generic method’s body is declared like that of any other method. The type-parameter names throughout the method declaration must match those declared in the type-parameter list. A type parameter can be declared only once in the type-parameter list but can appear more than once in the method’s parameter list. You can also use explicit type arguments to indicate the exact type that should be used to call a generic function, as in Display. Array< int >( int. Array );

Generic Classes A generic class describes a class in a type-independent manner. We can

Generic Classes A generic class describes a class in a type-independent manner. We can then instantiate type-specific objects of the generic class. Let’s look at example: Stack. sln Stack. Test. cs: repeats code in Test. Pop. Int/Test. Pop. Double and Test. Push. Int/Test. Push. Double How to fix this? Let’s code this together first. New. Stack. Test. cs

Generic Interfaces In New. Stack. Test. cs, we used a generic interface: IEnumerable <

Generic Interfaces In New. Stack. Test. cs, we used a generic interface: IEnumerable < T > Similar to generic classes, generic interfaces enable you to specify, with a single interface declaration, a set of related interfaces.

Common Data Structures - summary We’ve seen Array only so far fixed-size (can grow

Common Data Structures - summary We’ve seen Array only so far fixed-size (can grow with Resize) Dynamic data structures can automatically grow and shrink at execution time. Linked lists are collections of data items that are “chained together”. Stacks have insertions and deletions made at only one end: the top. Queues represent waiting lines; insertions are made at the back and deletions are made from the front. Binary trees facilitate high-speed searching and sorting of data.

Collections For the vast majority of applications, there is no need to build custom

Collections For the vast majority of applications, there is no need to build custom data structures. Instead, you can use the prepackaged data-structure classes provided by the. NET Framework. These classes are known as collection classes—they store collections of data. Each instance of one of these classes is a collection of items. Collection classes enable programmers to store sets of items by using existing data structures, without concern for how they are implemented. System. Collections contains collections that store references to objects.

Array. List The Array. List collection class is a conventional arrays and provides dynamic

Array. List The Array. List collection class is a conventional arrays and provides dynamic resizing of the collection. Method / Property Add Capacity Clear Contains Count Index. Of Description Adds an object to the end of the Array. List. Property that gets and sets the number of elements for which space is currently reserved in the Array. List. Removes all elements from the Array. List. Determines whether an element is in the Array. List. Read-only property that gets the number of elements stored in the Array. List. Returns the zero-based index of the first occurrence of a value in the Array. List Inserts an element into the Array. List at the specified index. Removes the first occurrence of a specific object from the Array. List. Remove. At Trim. To. Size Removes the element at the specified index of the Array. List. Sets the capacity to the actual number of elements in the Array. List.

Array. List Let’s write code to use Array. List. Suppose we have two color

Array. List Let’s write code to use Array. List. Suppose we have two color string arrays as follows: private static readonly string[] colors = { "MAGENTA", "RED", "WHITE", "BLUE", "CYAN" }; private static readonly string[] remove. Colors = { "RED", "WHITE", "BLUE" }; 1. Let’s create an array. List and add items in colors into it. 2. Let’s display the size and capacity of array. List. 3. Let’s find the index of the item “BLUE”. 4. Let’s write a method that removes the items in one Array. List from another. And then call that method to remove. Colors array from our first array. List. 5. Array. List. Test. cs

Generic Collections Problems with Nongeneric Collections Having to store data as object references causes

Generic Collections Problems with Nongeneric Collections Having to store data as object references causes less efficient code due to unboxing. The. NET Framework also includes the System. Collections. Generic namespace, which uses C#’s generics capabilities. Many of these new classes are simply generic counterparts of the classes in namespace System. Collections. Generic collections eliminate the need for explicit type casts that decrease type safety and efficiency. Generic collections are especially useful for storing structs, since they eliminate the overhead of boxing and unboxing.

Sorted. Dictionary<TKey, TValue> A dictionary is the general term for a collection of key/value

Sorted. Dictionary<TKey, TValue> A dictionary is the general term for a collection of key/value pairs. A hash table is one way to implement a dictionary. Example: Let’s write a program that counts the number of occurrences of each word in a string read from console using Sorted. Dictionary. To split the sentence into words, we will use this: // split input text into tokens string[] words = Regex. Split( input, @"s+" ); http: //msdn. microsoft. com/en-us/library/xfhwa 508. aspx Members: http: //msdn. microsoft. com/en-us/library/3 eayzh 46. aspx

Collection Interfaces All collection classes in the. NET Framework implement some combination of the

Collection Interfaces All collection classes in the. NET Framework implement some combination of the collection interfaces. Interface Description ICollection The root interface from which interfaces IList and IDictionary inherit. Contains a Count property to determine the size of a collection and a Copy. To method for copying a collection’s contents into a traditional array. IList An ordered collection that can be manipulated like an array. Provides an indexer for accessing elements with an int index. Also has methods for searching and modifying a collection, including Add, Remove, Contains and Index. Of. IEnumerable An object that can be enumerated. This interface contains exactly one method, Get. Enumerator, which returns an IEnumerator object. ICollection implements IEnumerable, so all collection classes implement IEnumerable directly or indirectly. IDictionary A collection of values, indexed by an arbitrary “key” object. Provides an indexer for accessing elements with an object index and methods for modifying the collection (e. g. , Add, Remove). IDictionary property Keys contains the objects used as indices, and property Values contains all the stored objects.

Hash. Table Arrays uses nonnegative integer indexes as keys. Sometimes associating these integer keys

Hash. Table Arrays uses nonnegative integer indexes as keys. Sometimes associating these integer keys with objects to store them is impractical, so we develop a scheme for using arbitrary keys. When an application needs to store something, the scheme could convert the application key rapidly to an index. Once the application has a key for which it wants to retrieve the data, simply apply the conversion to the key to find the array index where the data resides. The scheme we describe here is the basis of a technique called hashing, in which we store data in a data structure called a hash table.

Hash. Table A hash function performs a calculation that determines where to place data

Hash. Table A hash function performs a calculation that determines where to place data in the hash table. The hash function is applied to the key in a key/value pair of objects. Class Hashtable can accept any object as a key. For this reason, class object defines method Get. Hash. Code, which all objects inherit. Example: Let’s write a program that counts the number of occurrences of each word in a string read from console. To split the sentence into words, we will use this: // split input text into tokens string[] words = Regex. Split( input, @"s+" ); Hash. Table solution.

Hash. Table Hashtable method Contains. Key determines whether a key is in the hash

Hash. Table Hashtable method Contains. Key determines whether a key is in the hash table. Read-only property Keys returns an ICollection that contains all the keys. Hashtable property Count returns the number of key/value pairs in the Hashtable. If you use a foreach statement with a Hashtable object, the iteration variable will be of type Dictionary. Entry. The enumerator of a Hashtable (or any other class that implements IDictionary) uses the Dictionary. Entry structure to store key/value pairs. This structure provides properties Key and Value for retrieving the key and value of the current element. If you do not need the key, class Hashtable also provides a read-only Values property that gets an ICollection of all the values stored in the Hashtable.

Stack & Queue Stack: Push Pop Peek Queue: Example: Stack. Test. cs Exercise: re-write

Stack & Queue Stack: Push Pop Peek Queue: Example: Stack. Test. cs Exercise: re-write the Enqueue Dequeue Peek Stack. Test. cs example at home using a Queue this time.

Generic Collection Interfaces Interface ICollection(T) IList(T) Description Defines methods to manipulate generic collections. Represents

Generic Collection Interfaces Interface ICollection(T) IList(T) Description Defines methods to manipulate generic collections. Represents a collection of objects that can be individually accessed by index. IEnumerable(T) Exposes the enumerator, which supports a simple iteration over a collection of a specified type. IEnumerator(T) Supports a simple iteration over a generic collection. IDictionary(TKey, TValue) IComparer(T) Represents a generic collection of key/value pairs. Defines a method that a type implements to compare two objects. http: //msdn. microsoft. com/en-us/library/system. collections. generic. aspx

Other Generic Collection Classes List(T) Let’s re-write the Array. List. Test. cs using List<T>

Other Generic Collection Classes List(T) Let’s re-write the Array. List. Test. cs using List<T> this time. Stack(T) Queue(T) Linked. List(T) Sorted. List(TKey, TValue)