ArrayList声明 - 设置未知大小

时间:2014-11-06 22:08:13

标签: java arraylist constructor size declaration

我只在Java的第8周,所以我很新。

我有一个具有ArrayList对象的类列表。我有另一个名为TransactionCalc的类。我希望TransactionCalc有自己的ArrayList对象,名为arr3。我需要和列表一样大。我知道如何声明一个大小不是10的ArrayList,但如果你还不知道确切的大小,你怎么做?有可能吗?

public class TransactionCalc extends CalculateAbstract{

    private int count = 0;
    private ArrayList <ItemAttribute> arr3 = new ArrayList <ItemAttribute> (1);
                           //the 1 needs to be list.size() ?? 

我假设在另一个类中我需要做public static final int = list.size(),但是可以将这个常量传递给TransactionCalc类,以便它可以在声明中吗? / p>

我忘了添加这个...因为不需要arrayList的功能,我也可以做list.toArray(arr3)但是仍然不允许它成为TransactionCalc类的对象。有可能吗?我想避免一遍又一遍地向同一个类中的多个方法发送相同的arr3。

另外,我如何将其作为构造函数?

在amaleemur的帮助下编辑____________

我已将代码更新为:

public class FindItemInfo implements InterfacePrint{
    ArrayList <ItemAttribute> list = new ArrayList<ItemAttribute>();
         //load arraylist and do something with it
         //sort arraylist

    public void printPriority(){
        TransactionCalc finish = new TransactionCalc();
        for (int i = 0; i < list.size(); i++){      
            for (int x = 0; x < list.size(); x++){
                if(arr2.get(i) == list.get(x).getPriority()){
                        finish.cashOut(list.get(x), bankAccount, list.size());   
                }                 //send sorted arr2 to TransactionCalc class
            }
        }

    public static int getListSize(){
        return list.size();
    }
}


public class TransactionCalc {//extends CalculateAbstract{
    private int count = 0;
    //private ArrayList <ItemAttribute> arr3 = new ArrayList <ItemAttribute> (FindItemInfo.getListSize());
    private ItemAttribute[] arr3 = new ItemAttribute[FindItemInfo.getListSize()];

    public void cashOut (ItemAttribute item, double bankAccount, int size) {
        //ItemAttribute[] arr3 = new ItemAttribute[size];

        double runningTotal = 0;
        if((runningTotal + (item.getQuantity()*item.getPrice()))<= bankAccount){
            runningTotal += item.getQuantity()*item.getPrice();
            bankAccount -= runningTotal;
            System.out.format("You will spend $%.2f on " + item.getQuantity() + " of "+ item.getDescription(), runningTotal);
            System.out.format(" and have $%.2f left to spend\n", bankAccount);
        }
        else{
            arr3[count] = item;
            count++;
        }
    }

我将arr3作为TransactionCalc类的一个对象,因为它用于一些方法。数组/ arraylist的目的是收集未打印的项目。我可以使用数组或arraylist。我最初使用的是阵列,但后来却不知道它的大小。

我现在收到静态和非静态错误。当我尝试解决这个问题时,它会导致更多问题。

2 个答案:

答案 0 :(得分:1)

使用ArrayList的好处是你不必声明一个大小。

所以这就足够了,您可以将项添加到数组列表中。

private ArrayList <ItemAttribute> arr3 = new ArrayList <ItemAttribute>();

为了获得列表的大小,我建议这样做:

在包含ArrayList列表的类中,创建一个方法

public int getListSize(){

return list.size();

}

现在您可以安全地访问列表的大小。这有帮助吗?

所以现在你要做到这一点:

private ArrayList <ItemAttribute> arr3 = 
new ArrayList <ItemAttribute>(otherClass.getListSize());

其中otherClass是具有ArrayList列表的其他类名称的占位符。

答案 1 :(得分:0)

ArrayList是一种可变的集合类型。这意味着(在这种情况下)ArrayList的实例可以托管任意数量的元素,特别是,ArrayList的给定实例的包含元素可能在运行时更改。所以你不必声明元素的数量。在典型情况下,您很可能希望使用默认的c(=未指定元素的初始数量)。如果元素可能是一个好主意(性能方面),则指定初始量,如果您知道在运行时将插入大量对象。在这种情况下,初始化ArrayList的实例可以保护一些内存分配和memcopy操作。