Skip to content

Commit 38d0003

Browse files
committed
add Rule13
1 parent 0b111b5 commit 38d0003

2 files changed

Lines changed: 51 additions & 0 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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+
}

0 commit comments

Comments
 (0)