将ArrayList更改为Array

时间:2018-05-22 15:39:50

标签: java arrays

所以我决定使用ArrayList,但现在我想把它改成Array。我试图看看这是否只适用于Array而不是ArrayList。任何人都可以采取某种方式来做到这一切既简单又好用?我想改变它,但我在互联网上搜索了一些方法,但我发现它的信息对我的情况不起作用。

public class ProductManager {
    private List<Product> listOfProduct;
    public ProductManager() {
        this.listOfProduct= new ArrayList<>();
    }

    public int addProduct(Product p) {
        this.listOfProduct.add(p);
        return count();
    }

    public int count() {
        return this.listOfProduct.size();
    }

    public Product getProduct(int index) {
        if (index < 0 || index >=count()) {
            return null;
        }
        return this.listOfProduct.get(index);
    }

    public boolean removeProduct(int id) {
        int index = -1;
        for (int i = 0, n = count(); i < n;i++) {
            if(this.listOfProduct.get(i).getId() == id) {
                index = i;
                break;
            }
        }
        if(index != -1) {
            this.listOfProduct.remove(index);
            return true;
        }
        return false;
    }

一些建议值得赞赏:)谢谢!

2 个答案:

答案 0 :(得分:1)

好吧,看起来你已经开始使用基本的Java了。

在审核完您的代码后,我想与您分享一些要改进的地方。

首先,看一下您的问题,Product的数量是动态的,您并不确切知道要添加到商店中的Product的数量,即{ {1}}。这意味着您应该使用动态数据结构,并且您的代码使用ProductManager,这是正确的。只有在知道要分配的元素数量时才使用数组;否则,请转到List

要删除代码中List Collection的元素,最好使用List,您可以在循环时删除元素。在这里。

Iterator

对于public Product removeProduct(int id) { Iterator<Product> iterator = productList.iterator(); Product found = null; while(iterator.hasNext()) { Product product = iterator.next(); if(product.getId() == id) { found = product; iterator.remove(); // remove on the fly } } // return pointer to removed product // Note: it can be NULL return found; } 方法签名(返回值),您可以修改为根据需要返回removeProduct值。

您可以直接使用boolean方法,而不是将价格值作为字符串读取,然后手动解析为Float。详细了解Scanner here

要计算整个库存价格值,只需循环并汇总所有价格。

scanner.nextFloat()

我猜你的问题已经完成了。

如果您坚持从public float getInventoryValue() { int total = productList.size(); float sum = 0.0f; for(int i = 0; i < total; ++i) { // simple, easy loop sum += productList.get(i).getPrice(); } return sum; } 转换为数组,则可以:

  • List初始化一个已知大小的新静态数组,然后分配元素。
  • 或者,快速脏话List.size()

最后但并非至少,你应该很好地编写问题和格式代码;否则,其他人会投票并关闭你的问题:)

你做得很好,多一点!

答案 1 :(得分:0)

我查看了一些java文档,这是一个众所周知的事情。 https://www.tutorialspoint.com/java/util/arraylist_toarray.htm

但是一个简单的for循环也可以做到。

Product[] convertArrayListToArray(ArrayList<Product> arrList){
    Product[] arr = new Product[arrList.size()];
    for(int i = 0; i < arrList.size(); i++){
        arr[i] = arrList.get(i);
    }
    return arr;
}