Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml

AspAutocadCDot netExcelFox proHtmlJava
LinuxMathcadPhotoshopPhpSqlVisual studioWindowsXml

Using Sets

java



+ Font mai mare | - Font mai mic



Using Sets

Set has exactly the same interface as Collection, so there isn't any extra functionality as there is with the two different Lists. Instead, the Set is exactly a Collection, it just has different behavior. (This is the ideal use of inheritance and polymorphism: to express different behavior.) A Set allows only one instance of each object value to exist (what constitutes the "value" of an object is more complex, as you shall see).



Set (interface)

Each element that you add to the Set must be unique; otherwise the Set doesn't add the duplicate element. Objects added to a Set must define equals( ) to establish object uniqueness. Set has exactly the same interface as Collection. A Set does not guarantee it will maintain its elements in any particular order.

HashSet*

For all Sets except very small ones. Objects must also define hashCode( ).

ArraySet

A Set backed by an array. Designed for very small Sets, especially those that are frequently created and destroyed. For small Sets, creation and iteration is substantially cheaper than for HashSet. Performance gets quite bad when the Set is large. HashCode( ) is not required.

TreeSet

An ordered Set backed by a red-black tree. This way, you can extract an ordered sequence from a Set.

The following example does not show everything you can do with a Set, since the interface is the same as Collection and so was exercised in the previous example. Instead, this demonstrates the behavior that makes a Set unique:

//: Set1.java

// Things you can do with Sets

package c08.newcollections;

import java.util.*;

public class Set1

public static void main(String[] args)

} ///:~

Duplicate values are added to the Set, but when it is printed you'll see the Set has accepted only one instance of each value.

When you run this program you'll notice that the order maintained by the HashSet is different from ArraySet, since each has a different way of storing elements so they can be located later. (ArraySet keeps them sorted, while HashSet uses a hashing function, which is designed specifically for rapid lookups.) When creating your own types, be aware that a Set needs a way to maintain a storage order, just as with the "groundhog" examples shown earlier in this chapter. Here's an example:

//: Set2.java

// Putting your own type in a Set

package c08.newcollections;

import java.util.*;

class MyType

public boolean equals(Object o)

// Required for HashSet, not for ArraySet:

public int hashCode()

public String toString()

}

public class Set2

public static Set fill(Set a)

public static void test(Set a)

public static void main(String[] args)

} ///:~

The definitions for equals( ) and hashCode( ) follow the form given in the "groundhog" examples. You must define an equals( ) in both cases, but the hashCode( ) is necessary only if the class will be placed in a HashSet (which is likely, since that should generally be your first choice as a Set implementation).



At the time of this writing, TreeSet had only been announced and was not yet implemented, so there are no examples here that use TreeSet.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 681
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved