【发布时间】:2014-05-10 05:44:18
【问题描述】:
我正在尝试实现我自己的 ArrayList 而不使用 java 集合进行练习。在这个阶段,我想实现两个主要方法,add(E) 和 get(int) tp 得到这个想法。我的代码如下。但是我遇到了一些问题:
- “return (E) myData[index]”行发出警告“类型安全:从 Object 到 E 的未经检查的强制转换”。我该如何解决这个问题
- ArrayList.add(T) 的 Java 7 实现返回一个布尔值。在什么情况下 add() 必须返回 false。在什么逻辑下返回false,什么时候返回true?
- 在哪里可以找到 ArrayList 的 java 7 实现的源代码
PS。请不要只回答问题 3 并让我参考 1 和 2 的蔗糖代码!
import java.util.Arrays;
public class MyArrayList<E>{
private final int DEFAULT_SIZE=2;
private Object[] myData = new Object[DEFAULT_SIZE];
private int actSize=0;
public boolean add(E data){
if (actSize>=myData.length/2){
increaseSize();
}
myData[actSize++] = data;
return true;//when can it be false?
}
private void increaseSize()throws RuntimeException{
myData = Arrays.copyOf(myData, myData.length*2);
}
public E get(int index) throws RuntimeException{
if (index >= actSize){
throw new IndexOutOfBoundsException();
}
return (E) myData[index];
}
public static void main(String[] args) {
MyArrayList<String> arList = new MyArrayList<>();
arList.add("Hello");
arList.add("Bye bye!");
System.out.println(arList.get(1));// prints Bye bye! which is correct
}
}
【问题讨论】:
-
如果您下载JDK,您可以在 $JDK_HOME/src.zip 中找到源代码。如果没有JDK,可以使用grepcode.com之类的网站。
-
你在实现列表吗?
-
风格不一致(
=周围的空格和其他二进制操作)
标签: java collections arraylist