File tree Expand file tree Collapse file tree
effective_java/src/main/java/com/yiyun/Rule13 Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package com .yiyun .Rule13 ;
2+
3+ import java .util .Arrays ;
4+ import java .util .EmptyStackException ;
5+
6+ public class StackClone implements Cloneable {
7+ private Object [] elements ;
8+ private int size = 0 ;
9+ private static final int DEFAULT_INITIAL_CAPACITY = 16 ;
10+
11+ public StackClone () {
12+ this .elements = new Object [DEFAULT_INITIAL_CAPACITY ];
13+ }
14+
15+ @ Override
16+ protected StackClone clone () throws CloneNotSupportedException {
17+ return (StackClone )super .clone ();
18+ }
19+
20+ public void push (Object e ) {
21+ ensureCapacity ();
22+ elements [size ++] = e ;
23+ }
24+
25+ public Object pop () {
26+ if (size == 0 )
27+ throw new EmptyStackException ();
28+ Object result = elements [--size ];
29+ elements [size ] = null ; // Eliminate obsolete reference
30+ return result ;
31+ }
32+
33+ // Ensure space for at least one more element.
34+ private void ensureCapacity () {
35+ if (elements .length == size )
36+ elements = Arrays .copyOf (elements , 2 * size + 1 );
37+ }
38+ }
Original file line number Diff line number Diff line change 1+ package com .yiyun .Rule13 ;
2+
3+ import com .yiyun .Rule07 .MyStack ;
4+
5+ public class TestClone {
6+ public static void main (String [] args ) throws Exception {
7+ StackClone stackClone = new StackClone ();
8+ StackClone clone = stackClone .clone ();
9+ for (int i = 0 ; i < 18 ; i ++) {
10+ stackClone .push (i );
11+ }
12+ }
13+ }
You can’t perform that action at this time.
0 commit comments