在这个例子中,我创建了一个ArrayList<>而不是通常的数组[]。但是,我想知道将狗对象添加到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);
}
}
}
答案 0 :(得分:4)
目前,dogs
为空。这意味着sort
无效,而增强型for将永远不会执行。
您有几种选择:
实例化它们时添加它们。不要创建不会被使用的变量。
例如,您的其中一行将改为:
dogs.add(new Dog("Alex", "American Pit Bull Terrier", 100));
对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));
}};
根据评论中的建议,请使用Arrays.asList()
:
ArrayList<Dog> dogs = new ArrayList<>(Arrays.asList(dog1, dog2, dog3, dog4, dog5));
但这确实需要变量。
对于你提出的其他问题:
每个人都有自己的目的和地位。当您拥有固定长度的对象时使用数组,并在没有固定长度时使用任何类型的List
(ArrayList
,LinkedList
等)
正如我上面解释的那样,没有。 enhanced-for遍历集合中的现有元素,并且由于集合中没有元素,因此循环不会执行。
在循环中执行它有点尴尬,除非你在另一个可以索引的结构中有你想要的数据,所以我不推荐这种方法。
答案 1 :(得分:2)