将实例化对象添加到ArrayList的最佳方法是什么

时间:2015-02-24 20:42:34

标签: java arraylist

在这个例子中,我创建了一个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);
        }
    }
}

2 个答案:

答案 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));
    

    但这确实需要变量。

对于你提出的其他问题:

  • 每个人都有自己的目的和地位。当您拥有固定长度的对象时使用数组,并在没有固定长度时使用任何类型的ListArrayListLinkedList等)

  • 正如我上面解释的那样,没有。 enhanced-for遍历集合中的现有元素,并且由于集合中没有元素,因此循环不会执行。

    在循环中执行它有点尴尬,除非你在另一个可以索引的结构中有你想要的数据,所以我不推荐这种方法。

答案 1 :(得分:2)

  1. 主要的区别在于,在使用数据填充arraylist之后,它将会扩展,并且您将能够添加更多数据。在数组中,当它被填充,并且您尝试添加更多数据时,它会抛出异常。关于性能:它取决于......但通常是正常的阵列。
  2. 是的,请使用arraylistname.add(objectname);