Sie sind auf Seite 1von 33

Chapter 19 Java Data Structures

The

limitations of arrays
Java Collection Framework hierarchy
Use the Iterator interface to traverse a collection
Set interface, HashSet, and TreeSet
List interface, ArrayList, and LinkedList
Vector and Stack
Map, HashMap, and TreeMap
Collections and Arrays classes

Limitations of arrays
Onceanarrayiscreated,its

sizecannotbealtered.
Arrayprovidesinadequate

supportforinserting,deleting,
sorting,andsearching
operations.

Java Collection Framework


hierarchy
Acollectionisanobjectthat
representsagroupofobjects,
oftenreferredtoaselements.The
JavaCollectionsFrameworksupports
twotypesofcollections,named
collectionsandmaps.

Java Collection Framework


hierarchy, cont.
Acollectioncanbeasetoralist,definedinthe
interfacesSetandList,whicharesubinterfacesof
Collection.
AbstractSet

TreeSet

HashSet

Set
AbstractCollection

SortedSet

Collection
List

AbstractList

AbstractSequentialList

ArrayList

LinkedList

Vector

Stack

Java Collection Framework


hierarchy, cont.
AninstanceofMaprepresentsagroupof
objects,eachofwhichisassociatedwitha
key.Youcangettheobjectfromamapusinga
key,andyouhavetouseakeytoputthe
objectintothemap.

AbstractMap

TreeMap

HashMap

Map

SortedMap

The Collection Interface


Collection
+add(element: Object): boolean
+addAll(collection: Collection): boolean
+clear(): void
+contains(elment: Object): boolean
+containsAll(collection: Collection):boolean
+equals(object: Object): boolean
+hashcode(): int
+iterator(): Iterator
+remove(element: Object): boolean
+removeAll(collection: Collection): boolean
+retainAll(collection: Collection): boolean
+size(): int
+toArray(): Object[]
+toArray(array: Object[]): Object[]

TheCollection
interfaceisthe
rootinterfacefor
storingand
processinga
collectionof
objects.

ThehashCodeMethodand
theequalsMethod
ThehashCodemethodandtheequalsmethod
aredefinedintheObjectclassaswell
asintheCollectioninterface.The
contractofhashCode(equals)inthe
Objectclassisthesameastheonein
theCollectioninterface.
AclassthatimplementstheCollection
interfacedoesnothavetoimplementthe
hashCodemethodandtheequalsmethod,
becausebothmethodshavedefault
implementationintheObjectclass.

ThehashCodeMethodand
theequalsMethod,
cont.

Whatarethebenefitsofdefining
hashCodeandequalsinbothObject
classandtheCollectioninterface?I
thinkthebenefitsaretofacilitate
genericprogramming.Forinstance,you
mayhaveamethodwithaparameterof
theCollectiontype.Thisparameter
canusethehashCodemethodandthe
equalsmethodsincethemethodsarein
theCollectioninterface.

TheSetInterface
TheSetinterfaceextendstheCollection
interface.Itdoesnotintroducenew
methodsorconstants,butitstipulates
thataninstanceofSetcontainsno
duplicateelements.Theconcreteclasses
thatimplementSetmustensurethatno
duplicateelementscanbeaddedtothe
set.Thatisnotwoelementse1ande2
canbeinthesetsuchthat
e1.equals(e2)istrue.

TheAbstractSetClass
TheAbstractSetclassisaconvenience
classthatextendsAbstractCollection
andimplementsSet.TheAbstractSet
classprovidesconcreteimplementations
fortheequalsmethodandthehashCode
method.Thehashcodeofasetisthe
sumofthehashcodeofallthe
elementsintheset.Sincethesize
methodanditeratormethodarenot
implementedintheAbstractSetclass,
AbstractSetisanabstractclass.

TheHashSetClass
TheHashSetclassisaconcrete
classthatimplementsSet.It
canbeusedtostoreduplicate
freeelements.Forefficiency,
objectsaddedtoahashsetneed
toimplementthehashCodemethod
inamannerthatproperly
dispersesthehashcode.

Example19.1Using
HashSetandIterator
Thisexamplecreatesahashset
filledwithstrings,andusesan
iteratortotraversetheelements
inthelist.
TestHashSet

Run

TheSortedSetInterface
andtheTreeSetClass
SortedSetisasubinterfaceof
Set,whichguaranteesthatthe
elementsinthesetaresorted.
TreeSetisaconcreteclassthat
implementstheSortedSet
interface.Youcanuseaniterator
totraversetheelementsinthe
sortedorder.Theelementscanbe
sortedintwoways.

TheSortedSetInterface
andtheTreeSetClass,
cont.
OnewayistousetheComparable
interface.
Theotherwayistospecifya
comparatorfortheelementsintheset
iftheclassfortheelementsdoesnot
implementtheComparableinterface,or
youdontwanttousethecompareTo
methodintheclassthatimplementsthe
Comparableinterface.Thisapproachis
referredtoasorderbycomparator.

Example19.2Using
TreeSettoSort
ElementsinaSet
Thisexamplecreatesahashsetfilled
withstrings,andthencreatesatreeset
forthesamestrings.Thestringsare
sortedinthetreesetusingthecompareTo
methodintheComparableinterface.The
examplealsocreatesatreesetof
geometricobjects.Thegeometricobjects
aresortedusingthecomparemethodinthe
Comparatorinterface.
GeometricObjectComparator
TestTreeSet

Run

TheListInterface
Asetstoresnonduplicateelements.
Toallowduplicateelementstobe
storedinacollection,youneedto
usealist.Alistcannotonly
storeduplicateelements,butcan
alsoallowtheusertospecifywhere
theelementisstored.Theusercan
accesstheelementbyindex.

TheListInterface,
cont.
Collection

List
+add(index: int, element: Object) : boolean
+addAll(index: int, collection: Collection) : boolean
+get(index: int) : Object
+indexOf(element: Object) : int
+lastIndexOf(element: Object) : int
+listIterator() : ListIterator
+listIterator(startIndex: int) : ListIterator
+remove(index: int) : int
+set(index: int, element: Object) : Object
+subList(fromIndex: int, toIndex: int) : List

TheListIterator
Iterator
ListIterator
+add(element: Object) : void
+hasPrevious() : boolean
+nextIndex() : int
+previousIndex() : int
+previous() : Object
+previousIndex() : int
+set(element: Object) : void

ArrayListand
LinkedList
TheArrayListclassandtheLinkedListclassare
concreteimplementationsoftheListinterface.
Whichofthetwoclassesyouusedependsonyour
specificneeds.Ifyouneedtosupportrandom
accessthroughanindexwithoutinsertingor
removingelementsfromanyplaceotherthanthe
end,ArrayListoffersthemostefficient
collection.If,however,yourapplication
requirestheinsertionordeletionofelements
fromanyplaceinthelist,youshouldchoose
LinkedList.Alistcangroworshrink
dynamically.Anarrayisfixedonceitis
created.Ifyourapplicationdoesnotrequire
insertionordeletionofelements,themost
efficientdatastructureisthearray.

Example19.3Using
ArrayListand
LinkedList
Thisexamplecreatesanarraylist
filledwithnumbers,andinsertsnew
elementsintothespecifiedlocation
inthelist.Theexamplealsocreates
alinkedlistfromthearraylist,
insertsandremovestheelementsfrom
thelist.Finally,theexample
traversesthelistforwardand
backward.
TestList

Run

TheVectorandStack
Classes
TheJavaCollectionsFrameworkwas
introducedwithJava2.Severaldata
structuresweresupportedpriortoJava
2.AmongthemaretheVectorclassand
theStackclass.Theseclasseswere
redesignedtofitintotheJava
CollectionsFramework,buttheirold
stylemethodsareretainedfor
compatibility.Thissectionintroduces
theVectorclassandtheStackclass.

TheVectorClass
InJava2,Vectoristhesameas
ArrayList,exceptthatVectorcontains
thesynchronizedmethodsforaccessing
andmodifyingthevector.Noneofthe
newcollectiondatastructures
introducedsofararesynchronized.If
synchronizationisrequired,youcan
usethesynchronizedversionsofthe
collectionclasses.Theseclassesare
introducedlaterinthesection,The
CollectionsClass.

TheVectorClass,cont.
List

Vector
+addElement(element: Object) : void
+capacity() : void
+copyInto(anArray: Object[]) : void
+elementAt(index: int) : Object
+elements() : Enumeration
+ensureCapacity() : void
+firstElement() : int
+insertElementAt(index: int) : void
+lastElement() : Object
+removeAllElements() : void
+removeElement(element: Object) : void
+removeElementAt(index: int) : void
+setElementAt(element: Object, index: int) : void
+setSize(newSize: int) : void
+trimToSize() : void

TheStackClass
Vector

Stack
+empty() : boolean
+peek() : Object
+pop() : Object
+push(element: Object) : void
+search(element: Object) : int

TheStackclass
representsalastin
firstoutstackof
objects.Theelements
areaccessedonlyfrom
thetopofthestack.
Youcanretrieve,
insert,orremovean
elementfromthetop
ofthestack.

Example19.4Using
VectorandStack
Thisexamplepresentstwoprogramsto
rewriteExample5.2,usingavectoranda
stackinsteadofanarray,respectively.
Theprogramreadsstudentscoresfromthe
keyboard,storesthescoresinthevector,
findsthebestscores,andthenassigns
gradesforallthestudents.Anegative
scoresignalstheendoftheinput.

AssignGradeUsingVector

Run

TheMapInterface
Map
+clear() : void
+containsKey(key: Object) : boolean
+containsValue(value: Object) : boolean
+entrySet() : Set
+get(key: Object) : Object
+isEmpty() : boolean
+keySet() : Set
+put(key: Object, value: Object) : Object
+putAll(m: Map) : void
+remove(key: Object) : Object
+size() : int
+values() : Collection

TheMap
interfacemaps
keystothe
elements.The
keysarelike
indexes.In
List,the
indexesare
integer.InMap,
thekeyscanbe
anyobjects.

HashMapandTreeMap
TheHashMapandTreeMapclassesare
twoconcreteimplementationsofthe
Mapinterface.TheHashMapclassis
efficientforlocatingavalue,
insertingamapping,anddeletinga
mapping.TheTreeMapclass,
implementingSortedMap,isefficient
fortraversingthekeysinasorted
order.

Example19.5Using
HashMapandTreeMap
Thisexamplecreatesahashmapthat
mapsborrowerstomortgages.The
programfirstcreatesahashmap
withtheborrowersnameasitskey
andmortgageasitsvalue.The
programthencreatesatreemapfrom
thehashmap,anddisplaysthe
mappingsinascendingorderofthe
keys.
TestMap

Run

The
Collectio
nsClass
TheCollections
classcontains
variousstatic
methodsfor
operatingon
collectionsand
maps,for
creating
synchronized
collection

Collections
+binarySearch(list: List, key: Object) : int
+binarySearch(list: List, key: Object, c: Comparator) : int
+copy(src: List, des: List) : void
+enumeration(c: final Collection) : Enumeration
+fill(list: List, o: Object) : void
+max(c: Collection) : Object
+max(c: Collection, c: Comparator) : Object
+min(c: Collection) : Object
+min(c: Collection, c: Comparator) : Object
+nCopies(n: int, o: Object) : List
+reverse(list: List) : void
+reverseOrder() : Comparator
+shuffle(list: List) : void
+shuffle(list: List, rnd: Random) : void
+singleton(o: Object) : Set
+singletonList(o: Object) : List
+singletonMap(key: Object, value: Object) : Map
+sort(list: List) : void
+sort(list: List, c: Comparator) : void
+synchronizedCollection(c: Collection) : Collection
+synchronizedList(list: List) : List
+synchronizedMap(m: Map) : Map
+synchronizedSet(s: Set) : Set
+synchronizedSortedMap(s: SortedMap) : SortedMap
+synchronizedSortedSet(s: SortedSet) : SortedSet
+unmodifiedCollection(c: Collection) : Collection
+unmodifiedList(list: List) : List
+unmodifiedMap(m: Map) : Map
+unmodifiedSet(s: Set) : Set
+unmodifiedSortedMap(s: SortedMap) : SortedMap
+unmodifiedSortedSet(s: SortedSet) : SortedSet

Example19.6Usingthe
CollectionsClass
Thisexampledemonstratesusingthe
methodsintheCollectionsclass.
Theexamplecreatesalist,sorts
it,andsearchesforanelement.
Theexamplewrapsthelistintoa
synchronizedandreadonlylist.

TestCollections

Run

The
Arrays
Class

TheArrays
classcontains
variousstatic
methodsfor
sortingand
searching
arrays,for
comparing
arrays,andfor
fillingarray
elements.It

Arrays
+asList(a: Object[]) : List
+binarySearch(a: byte[],key: byte) : int
+binarySearch(a: char[], key: char) : int
+binarySearch(a: double[], key: double) : int
+binarySearch(a,: float[] key: float) : int
+binarySearch(a: int[], key: int) : int
+binarySearch(a: long[], key: long) : int
+binarySearch(a: Object[], key: Object) : int
+binarySearch(a: Object[], key: Object, c: Comparator) : int
+binarySearch(a: short[], key: short) : int
+equals(a: boolean[], a2: boolean[]) : boolean
+equals(a: byte[], a2: byte[]) : boolean
+equals(a: char[], a2: char[]) : boolean
+equals(a: double[], a2: double[]) : boolean
+equals(a: float[], a2: float[]) : boolean
+equals(a: int[], a2: int[]) : boolean
+equals(a: long[], a2: long[]) : boolean
+equals(a: Object[], a2: Object[]) : boolean
+equals(a: short[], a2: short[]) : boolean
+fill(a: boolean[], val: boolean) : void
+fill(a: boolean[], fromIndex: int, toIndex: int, val: boolean) : void
Overloaded fill method for char, byte, short, int, long, float, double,
and Object.
+sort(a: byte[]) : void
+sort(a: byte[], fromIndex: int, toIndex: int) : void
Overloaded sort method for char, short, int, long, float, double, and
Object.

Example19.7Usingthe
ArraysClass
Thisexampledemonstratesusingthe
methodsintheArraysclass.The
examplecreatesanarrayofintvalues,
fillspartofthearraywith50,sorts
it,searchesforanelement,and
comparesthearraywithanotherarray.

TestArrays

Run

Das könnte Ihnen auch gefallen