Microsoft KB Archive/307933

= How to work with the HashTable collection in Visual Basic .NET or in Visual Basic 2005 =

Article ID: 307933

Article Last Modified on 12/6/2006

-

APPLIES TO


 * Microsoft Visual Basic 2005
 * Microsoft Visual Basic .NET 2003 Standard Edition
 * Microsoft Visual Basic .NET 2002 Standard Edition

-



This article was previously published under Q307933





IN THIS TASK
SUMMARY
 * Steps to Build the Sample



SUMMARY
This article provides information about the HashTable collection. Because hashing eliminates the need for costly searching of data to retrieve the data, you can use hashing to efficiently retrieve data. Hashing uses the value of the key itself to locate of the data.

The Base Class Libraries offer a HashTable class that is defined in the System.Collections namespace so that you are not required to code your own hash tables.

back to the top

Steps to Build the Sample
A HashTable collection stores a (Key, Value) pair and uses the Key to hash and obtain the storage location. The Key is immutable and cannot have duplicate entries in the HashTable. This sample uses several instances of a simple Person class to store in a HashTable. The last name is used as the Key.  Open Microsoft Visual Studio .NET or Microsoft Visual Studio 2005, and create a Windows Application project in Visual Basic .NET or in Visual Basic 2005. Form1 is added to the project by default. In Solution Explorer, right-click the project name, point to Add, and then click Add Class to add a Class module. Class1 is added to the project by default. In the Add New Item dialog box, click Open.

Note In Visual Studio 2005, click Add instead of Open.  Replace any code in the Class1 module with the following code: Public Class Person Public Fname, Lname As String

Sub New(ByVal FirstName As String, ByVal LastName As String) Fname = FirstName Lname = LastName End Sub

Public Overrides Function ToString As String Return Fname + &quot; &quot; + Lname End Function End Class The Person class has one constructor that takes the FirstName and LastName parameters and assigns these parameters to the local variables. The ToString function overrides ToString from the Object class to return Fname and Lname concatenated together.   In Form1.vb, add the following Imports statement to the top of the code module: Imports System.Collections   Create a form-level Hashtable object, and declare three variables of type Person. Add the following code to the Form1 class: Dim MyTable As New Hashtable

'For simplicity, create three Person objects to add to the HashTable collection.

Dim Person1, Person2, Person3 As Person </li> In the following steps, use the Add method of the Hashtable object to add three Person objects to the Hashtable in a try-catch block. The try-catch block catches the exception and displays a message if duplicate keys exist. <ol style="list-style-type: lower-alpha;"> Place a Button control on Form1, and change the Text property to Add Elements .</li>  Double-click the button to open its Code window, and paste the following code in the Button1_Click event: Person1 = New Person(&quot;Karen&quot;, &quot;Berge&quot;) Person2 = New Person(&quot;David&quot;, &quot;Campbell&quot;) Person3 = New Person(&quot;Jim&quot;, &quot;Kim&quot;)

'The Add method takes Key as the first parameter and Value as the second parameter.

Try MyTable.Add(Person1.Lname, Person1) MyTable.Add(Person2.Lname, Person2) MyTable.Add(Person3.Lname, Person3) Catch ae As ArgumentException MessageBox.Show(&quot;Duplicate Key&quot;) End Try </li></ol> </li> The Hashtable object provides an indexer. In the following steps, index with the Key to access the value that is stored at the hashed location. <ol style="list-style-type: lower-alpha;"> Add a Button control to Form1, and change the Text property to Get Items .</li>  Double-click the button, and paste the following code in the Button2_Click event: 'Use the indexer of the Hashtable class to retrieve your objects. The indexer takes 'Key as a parameter and accesses it with the Hashed location. Try MessageBox.Show(MyTable(Person1.Lname).ToString) MessageBox.Show(MyTable(Person2.Lname).ToString) MessageBox.Show(MyTable(Person3.Lname).ToString) Catch ex As NullReferenceException MessageBox.Show(&quot;Key not in Hashtable&quot;) End Try </li></ol> </li> In the following steps, use the Remove method to remove a single item from the HashTable collection: <ol style="list-style-type: lower-alpha;"> Add a Button control to Form1, and change the Text property to Remove Item .</li>  Double-click the button, and paste the following code in the Button3_Click event: 'Use the Count property. If (MyTable.Count = 0) Then MessageBox.Show(&quot;There are no items in HashTable&quot;) Else MessageBox.Show(&quot;The count before removing an Item is&quot; & &quot; &quot; & MyTable.Count) MessageBox.Show(&quot;Removing value stored at key value (Berge)&quot;) 'Remove the object that is stored at the Key value Person1.Lname. MyTable.Remove(Person1.Lname) End If                       </li></ol> </li> In the following steps, enumerate the items that are stored in the HashTable collection. <ol style="list-style-type: lower-alpha;"> Add a Button control to Form1, and change the Text property to Enumerate .</li>  Double-click the button, and paste the following code in the Button4_Click event: Dim Enumerator As IDictionaryEnumerator Enumerator = MyTable.GetEnumerator

If (MyTable.Count = 0) Then MessageBox.Show(&quot;The HashTable is empty&quot;) Else MessageBox.Show(&quot;Enumerating through the HashTable collection&quot;) While Enumerator.MoveNext MessageBox.Show(Enumerator.Value.ToString) End While End If

Dim MyKeys As ICollection Dim Key As Object

If (MyTable.Count = 0) Then MessageBox.Show(&quot;The HashTable is empty&quot;) Else MessageBox.Show(&quot;Accessing keys property to return keys collection&quot;) MyKeys = MyTable.Keys

For Each Key In MyKeys MessageBox.Show(Key.ToString) Next End If This code declares a variable of type IDictionaryEnumerator and calls the GetEnumerator method of the HashTable collection. With the Enumerator returned, the code enumerates through the items in the collection and uses the Keys method of the HashTable to enumerate through the keys. </li></ol> </li> In the following steps, use the Clear method to clear the HashTable. <ol style="list-style-type: lower-alpha;"> Add a Button control to Form1, and change the Text property to Clear .</li>  Double-click the button, and paste the following code in the Button5_Click event: MyTable.Clear MessageBox.Show(&quot;HashTable is now empty&quot;) </li></ol> </li> Follow these steps to build and run the application: <ol style="list-style-type: lower-alpha;"> <li>Click Add Items. Note that three Person objects are added to the HashTable collection.</li> <li>Click Get Items. Note that the indexer obtains the items in the HashTable collection. The three newly added items are displayed.</li> <li>Click Remove Item. Note that the item at the &quot;Berge&quot; key location is deleted.</li> <li>Click Enumerate. Note that IDictionaryEnumerator enumerates through the items in the HashTable collection.</li> <li>Click Clear. Note that all the items are cleared from the HashTable collection.</li></ol> </li></ol>

NOTE: The example companies, organizations, products, domain names, e-mail addresses, logos, people, places, and events depicted herein are fictitious. No association with any real company, organization, product, domain name, email address, logo, person, places, or events is intended or should be inferred.

back to the top

Additional query words: try...catch

Keywords: kbvs2005swept kbvs2005applies kbhowtomaster KB307933

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.