Java >> Java tutorial >  >> Tag >> Stack

Hvorfor brugte Joshua Bloch 2*størrelse + 1 til at ændre størrelsen på stakken i Effektiv Java?

Jeg tolker det som tryghedsforsvar mod en hypotetisk fremtidig fejl. Det er rigtigt, at som skrevet vil denne klasse ikke have en matrixkapacitet på 0, så det er ikke strengt nødvendigt at tilføje 1, men den antagelse kan stille og roligt mislykkes, når flere funktioner er tilføjet.

Eksempler på mulige yderligere funktioner inkluderer dem fra java.util.ArrayList , som har en trimToSize() metode, der kan indstille kapaciteten til 0, og en konstruktør, der tillader initialisering af data fra en (muligvis tom) samling, og en konstruktør, der tillader eksplicit at sætte kapaciteten til 0. Du kan også forestille dig en funktion, der automatisk reducerer denne klasses tildelte kapacitet når den er tømt. Eller måske vil nogen redigere DEFAULT_INITIAL_CAPACITY konstant. Forestil dig nu, at kapacitetsændrende metoder bliver adskilt af skærmfulde af javadoc-kommentarer og opdelt på tværs af underklasser. Det er let at glemme, at du skulle forhindre, at kapaciteten blev 0.

Hvis ensureCapacity() afhænger af, at størrelsen ikke er nul, du skal altid have den antagelse i tankerne, mens du omarbejder klassen. Tilføjer +1 er en lavprisændring, der fjerner den bekymring. Det er også et eksempel på en simpel aritmetisk måde at håndtere en kantsag.


Java tag