diff --git a/group11/1059156023/dataStructure/.classpath b/group11/1059156023/dataStructure/.classpath new file mode 100644 index 0000000000..fb5011632c --- /dev/null +++ b/group11/1059156023/dataStructure/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group11/1059156023/dataStructure/.gitignore b/group11/1059156023/dataStructure/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group11/1059156023/dataStructure/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group11/1059156023/dataStructure/.project b/group11/1059156023/dataStructure/.project new file mode 100644 index 0000000000..35bb23a0fc --- /dev/null +++ b/group11/1059156023/dataStructure/.project @@ -0,0 +1,17 @@ + + + dataStructure + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group11/1059156023/dataStructure/src/com/coding/basic/ArrayList.java b/group11/1059156023/dataStructure/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..c853dcaea3 --- /dev/null +++ b/group11/1059156023/dataStructure/src/com/coding/basic/ArrayList.java @@ -0,0 +1,71 @@ +package com.coding.basic; + +import java.util.List; + +public class ArrayList implements List{ + private int size; + + //设置一个默认容量,当调用默认构造函数实例化数组后,需要扩容时可用 + private static final int DEFAULT_CAPACITY=10; + + //Integer.MAX_VALUE:2147483647,MAX_ARRAY_SIZE:2147483639 + private static final int MAX_ARRAY_SIZE=Integer.MAX_VALUE-8; + + private Object[] elementData; + + //定义一个默认为空的数组,供默认构造函数使用 + private static final Object[] EMPTY_ELEMENTDATA={}; + + //定义默认构造函数,实例化为空数组 + public ArrayList(){ + this.elementData=EMPTY_ELEMENTDATA; + } + + //定义一个有参的构造函数 + public ArrayList(int initialCapacity){ + if(initialCapacity<0) + throw new IllegalArgumentException("Illegal Capacity:"+initialCapacity); + this.elementData = new Object[initialCapacity]; + } + + //定义add(Object o)方法,默认在数组末尾添加 + public boolean add(Object o){ + //要添加一个数,所以用ensureCapacityInternal()判断size+1个的数,数组是否放得下 + ensureCapacityInternal(size+1); + elementData[size++]=o; + return true; + } + + private void ensureCapacityInternal(int minCapacity) { + if(elementData == EMPTY_ELEMENTDATA) + minCapacity = DEFAULT_CAPACITY; + + //如果需要扩容,则调用grow() + if(minCapacity-elementData.length>0) + grow(minCapacity); + } + + private void grow(int minCapacity) { + int oldCapacity = elementData.length; + int newCapacity = oldCapacity+(oldCapacity>>1); + + //原始长度是0时,即原来是空数组时 + if(newCapacity-minCapacity<0) + newCapacity = minCapacity; + + //如果新的容量超过了数组最大容量,就调用hugeCapacity()把能给的最大容量给它 + if(newCapacity-MAX_ARRAY_SIZE>0) + newCapacity = hugeCapacity(minCapacity); + + + } + + private static int hugeCapacity(int minCapacity) { + if (minCapacity<0) { + throw new OutOfMemoryError(); //抛出内存溢出异常 + } + //如果minCapacity比MAX_ARRAY_SIZE大,则返回int类型所能表示的最大值,否则返回MAX_ARRAY_SIZE + return (minCapacity>MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE; + } + +} diff --git a/group11/1178243325/DataStructure/src/main/java/com/coding/Main.java b/group11/1178243325/DataStructure/src/main/java/com/coding/Main.java index 31d2f2f277..3260081ca1 100644 --- a/group11/1178243325/DataStructure/src/main/java/com/coding/Main.java +++ b/group11/1178243325/DataStructure/src/main/java/com/coding/Main.java @@ -1,9 +1,9 @@ -package com.coding; +package com.coding; import com.coding.basic.*; public class Main { public static void main(String[] args) { - ArrayList list = new ArrayList(); + ArrayList list = new ArrayList(); list.add(0, "2xxx"); list.add(1, "we"); @@ -17,7 +17,7 @@ public static void main(String[] args) { } System.out.println(list.size()); - LinkedList llist = new LinkedList(); + LinkedList llist = new LinkedList(); llist.add("hu"); llist.add("zhao"); llist.add(2,"xing"); @@ -31,12 +31,12 @@ public static void main(String[] args) { System.out.print(llist.get(i)); System.out.println(llist.size()); - Iterator literator = llist.iterator(); + Iterator literator = llist.iterator(); while(literator.hasNext()) { System.out.println(literator.next()); } - Stack stack = new Stack(); + Stack stack = new Stack(); stack.push(1); stack.push(2); stack.push(3); @@ -45,7 +45,7 @@ public static void main(String[] args) { while(!stack.isEmpty()) System.out.println(stack.pop()); - Queue queue = new Queue(); + Queue queue = new Queue(); queue.enQueue(1); queue.enQueue(2); queue.enQueue(3);