Revise the array list implementation given in Section 7.2.1 so that when the ac- tual number of elements, n, in the array goes below N/4, where N is the array capacity, the array shrinks to half its size.

C++ Programming: From Problem Analysis to Program Design
8th Edition
ISBN:9781337102087
Author:D. S. Malik
Publisher:D. S. Malik
Chapter17: Linked Lists
Section: Chapter Questions
Problem 5PE
icon
Related questions
Question

Java programming question:

please jelp with C 7.29

C 7.29: Revise the array list implementation given in Section 7.2.1 so that when the ac- tual number of elements, n, in the array goes below N/4, where N is the array capacity, the array shrinks to half its size.

7.2.1 Dynamic Arrays
The ArrayList implementation in Code Fragments 7.2 and 7.3 (as well as those for
a stack, queue, and deque from Chapter 6) has a serious limitation; it requires that
a fixed maximum capacity be declared, throwing an exception if attempting to add
an element once full. This a major weakness, because if a user is unsure of the
maximum size that will be reached for a collection, there is risk that either too
large of an array will be requested, causing an inefficient waste of memory, or that
too small of an array will be requested, causing a fatal error when exhausting that
capacity.
Java's ArrayList class provides a more robust abstraction, allowing a user to
add elements to the list, with no apparent limit on the overall capacity. To provide
this abstraction, Java relies on an algorithmic sleight of hand that is known as a
dynamic array.
In reality, elements of an ArrayList are stored in a traditional array, and the
precise size of that traditional array must be internally declared in order for the
system to properly allocate a consecutive piece of memory for its storage. For
example, Figure 7.2 displays an array with 12 cells that might be stored in memory
locations 2146 through
2157 on a computer
system.
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
Xxxs
Figure 7.2: An array of 12 cells, allocated in memory locations 2146 through 2157.
Because the system may allocate neighboring memory locations to store other data,
the capacity of an array cannot be increased by expanding into subsequent cells.
The first key to providing the semantics of an unbounded array is that an array
list instance maintains an internal array that often has greater capacity than the
current length of the list. For example, while a user may have created a list with
five elements, the system may have reserved an underlying array capable of storing
eight object references (rather than only five). This extra capacity makes it easy to
add a new element to the end of the list by using the next available cell of the array.
If a user continues to add elements to a list, all reserved capacity in the underly-
ing array will eventually be exhausted. In that case, the class requests a new, larger
array from the system, and copies all references from the smaller array into the
beginning of the new array. At that point in time, the old array is no longer needed,
so it can be reclaimed by the system. Intuitively, this strategy is much like that of
the hermit crab, which moves into a larger shell when it outgrows its previous one.
Transcribed Image Text:7.2.1 Dynamic Arrays The ArrayList implementation in Code Fragments 7.2 and 7.3 (as well as those for a stack, queue, and deque from Chapter 6) has a serious limitation; it requires that a fixed maximum capacity be declared, throwing an exception if attempting to add an element once full. This a major weakness, because if a user is unsure of the maximum size that will be reached for a collection, there is risk that either too large of an array will be requested, causing an inefficient waste of memory, or that too small of an array will be requested, causing a fatal error when exhausting that capacity. Java's ArrayList class provides a more robust abstraction, allowing a user to add elements to the list, with no apparent limit on the overall capacity. To provide this abstraction, Java relies on an algorithmic sleight of hand that is known as a dynamic array. In reality, elements of an ArrayList are stored in a traditional array, and the precise size of that traditional array must be internally declared in order for the system to properly allocate a consecutive piece of memory for its storage. For example, Figure 7.2 displays an array with 12 cells that might be stored in memory locations 2146 through 2157 on a computer system. 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 Xxxs Figure 7.2: An array of 12 cells, allocated in memory locations 2146 through 2157. Because the system may allocate neighboring memory locations to store other data, the capacity of an array cannot be increased by expanding into subsequent cells. The first key to providing the semantics of an unbounded array is that an array list instance maintains an internal array that often has greater capacity than the current length of the list. For example, while a user may have created a list with five elements, the system may have reserved an underlying array capable of storing eight object references (rather than only five). This extra capacity makes it easy to add a new element to the end of the list by using the next available cell of the array. If a user continues to add elements to a list, all reserved capacity in the underly- ing array will eventually be exhausted. In that case, the class requests a new, larger array from the system, and copies all references from the smaller array into the beginning of the new array. At that point in time, the old array is no longer needed, so it can be reclaimed by the system. Intuitively, this strategy is much like that of the hermit crab, which moves into a larger shell when it outgrows its previous one.
Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 4 steps with 1 images

Blurred answer
Knowledge Booster
Arrays
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
C++ Programming: From Problem Analysis to Program…
C++ Programming: From Problem Analysis to Program…
Computer Science
ISBN:
9781337102087
Author:
D. S. Malik
Publisher:
Cengage Learning