在这个例子中,我创建了一个 ArrayList<> 的狗而不是通常的 Array[]。但是,我想知道将 dog 对象添加到 ArrayList 的最佳方法,并且我还想知道以下内容:
1- ArrayList 与 Array 有何不同?哪一个更好?
2- 是否可以使用 for 循环将实例化的对象添加到 ArrayList 中?
import java.util.ArrayList;
import java.util.Collections;
public class DogDriver {
public static void main(String[] args) {
ArrayList<Dog> dogs = new ArrayList();
Dog dog1 = new Dog("Alex", "American Pit Bull Terrier", 100); //(name, breed, license)
Dog dog2 = new Dog("Duke", "German Shepherd", 113);
Dog dog3 = new Dog("Lucy", "Rottweiler", 120);
Dog dog4 = new Dog("Bailey", "Doberman Pinscher", 119);
Collections.sort(dogs);
for (Dog dog : dogs) {
System.out.println(dog);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,dogs空空如也。这意味着sort没有任何效果,而且增强的 for 永远不会执行。
您有多种选择:
在实例化它们时添加它们。不要创建不会被使用的变量。
例如,您的其中一行将改为:
dogs.add(new Dog("Alex", "American Pit Bull Terrier", 100));
Run Code Online (Sandbox Code Playgroud)对 ArrayList 使用静态初始值设定项。这有点难读,但它非常光滑。它完成与直接添加相同的事情,但在不同的位置。
ArrayList<Dog> dogs = new ArrayList<Dog>() {{
add(new Dog("Alex", "American Pit Bull Terrier", 100));
add(new Dog("Duke", "German Shepherd", 113));
add(new Dog("Lucy", "Rottweiler", 120));
add(new Dog("Bailey", "Doberman Pinscher", 119));
}};
Run Code Online (Sandbox Code Playgroud)按照评论中的建议,使用Arrays.asList():
ArrayList<Dog> dogs = new ArrayList<>(Arrays.asList(dog1, dog2, dog3, dog4, dog5));
Run Code Online (Sandbox Code Playgroud)
不过,这确实需要变量。
对于您提出的其他问题:
每个人都有自己的目的和位置。使用数组时,你有对象与工作的固定长度,并使用List任何类型(的ArrayList,LinkedList等),当你没有一个固定长度。
正如我上面解释的那样,不。Enhanced-for 迭代集合中的现有元素,由于集合中没有元素,循环将不会执行。
除非您在另一个可以索引的结构中拥有您想要的数据,否则在循环中执行它会有点尴尬,所以我不推荐这种方法。