【问题标题】:One liner to create array list which shows initial size to be 100一个创建数组列表的衬垫,显示初始大小为 100
【发布时间】:2015-09-20 01:39:08
【问题描述】:

我想创建一个数组列表,这样当我打印 ArrayList.size() 时,我希望它显示 100 或其他一些大数字。

场景 这是一个程序,我试图找到适合条件的数组列表的最小大小。所以我希望 ArrayList 的初始值很大,以便它不断被较小的组合覆盖。

类似于找到最小数字的程序,您将变量从最小初始化为一个大数字,以便在线性遍历中被覆盖。

编辑:这是我要解决的问题 求最小面额3和5的硬币找4找零。是的,基本上应该返回是不可能的。

如果问题只是找到硬币的数量,我已经做对了

public class FindCount
{
    public static void main(String[] args)
    {
        int coins = fun(4);
        if(coins == 999)    
            System.out.println("Not possible to make change with this denomination");
        else 
            System.out.println(coins);
    }

    static int fun(int n)
    {   
        if(n == 0)
            return 0;

        int ret1 = 999;
        int ret2 = 999;

        if(n >= 3)
        {
            int rec1 = fun(n-3);
            if(rec1 != 999) 
                ret1 = 1+rec1;
        }

        if(n >= 5)
        {
            int rec2 = fun(n-5);
            if(rec2 != 999) 
                ret2 = 1+rec2;
        }

        int totalret = min(ret1, ret2);

        return totalret;
    }

    static int min(int a, int b)
    {
        return a<b?a:b;
    }
}

请注意,上面我使用了一个名为 totalret 的变量,如果是 999,我可以用它来声明不可能达到这个结果。

但是,如果我被要求打印所需的元素而不仅仅是查找计数,那么如果有任何路径无法进行更改,程序就会出错。这是因为,这里的 totalret 被初始化为 null,而不是像上面的程序中那样的 999 个元素的大型 ArrayList。

import java.util.ArrayList;


public class PrintSequence
{
    static int[] options = {3,5};

    public static void main(String[] args)
    {
        ArrayList<Integer> result = new ArrayList<Integer>();
        result = fun(4);
        for(int i = 0;i<result.size();i++)
            System.out.print(result.get(i));
    }

    static ArrayList<Integer> fun(int n)
    {       
        int smallest = 999;
        ArrayList<Integer> totalret = null;
        for(int i = 0;i<options.length;i++)
        {
            if(n-options[i] >= 0)
            {
                ArrayList<Integer> reci = fun(n-options[i]);
                ArrayList<Integer> reti = new ArrayList<Integer>();
                reti.addAll(reci);
                reti.add(0,options[i]);

                if(reti.size() < smallest)
                {
                    totalret = reti;
                    smallest = reti.size();
                }
            }
        }

        if(totalret == null)
            totalret = new ArrayList<Integer>();

        return totalret;
    }
}

请建议我如何编辑打印程序以打印这是不可能的。

【问题讨论】:

  • 这听起来像是一个 XY 问题。大图是什么?你要解决什么问题?
  • @Dici,请稍等。将发布编辑。
  • 请阅读指南How do I ask a good question,尤其是关于最小、完整和可验证示例(MCVE)的部分。这将帮助您自己解决问题。如果您这样做但仍然卡住,您可以回来发布您的 MCVE、您尝试了什么以及结果如何,以便我们更好地帮助您。
  • @Dici,请参阅编辑。

标签: java arraylist


【解决方案1】:

单行创建大小为 100 的 ArrayList

new ArrayList<Object>(Arrays.asList(new Object[100]))

更新

Object 替换为任何合适的(非原始)类型。

如果您不需要它是一个ArrayList,而只是一个不能改变大小的List,以下是好的(以String 为例):

Arrays.asList(new String[100])

【讨论】:

  • 这将告别类型安全,可能不是 OP 想要的。
  • @MickMnemonic 您可以将 Object 替换为适合您的类型。
  • 还不错;这是一个有效的建议。这个问题还有点不清楚,希望OP能澄清一下,让我们知道真正的需求。
  • 是的,我是按标题和第一段来的。我的单眼线非常适合。
【解决方案2】:

这可能会对您有所帮助,尽管它不是单行的。

Integer[] intArray = new Integer[100]; 
ArrayList arr  = new ArrayList<Integer>(Arrays.asList(intArray));
int size = arr.size();
System.out.println(size);

【讨论】:

    【解决方案3】:

    嗯。如果您必须使用 ArrayList,我能想到的初始化其大小的唯一方法是用“虚拟”值填充它,即循环并将一些值添加到某个 Nth 大小。在您的情况下可以/可行吗?

    当然,如果其他人有更好的解决方案,请随时发表评论。

    【讨论】:

    • 嗯,重新考虑我的投票。没有完全理解问题
    • 嗨!你的意思是... new ArrayList(some_capacity) ?如果是这样,那仍然只会创建一个空列表,但可以添加的元素数量有限。还是我误解了你的说法?
    • 你是对的,这就是我的意思,但我只是重新阅读了答案,他希望size 返回 100,以创建一个包含 100 项容量的列表。我现在正在仔细阅读它,看看它是否有意义
    【解决方案4】:

    希望这对您有所帮助。

    Integer[] is = new Integer[100 + new Random().nextInt(500)];
    Arrays.fill(is, 0);
    List<Integer> list = Arrays.asList(is);
    

    【讨论】:

    • OP 要求提供 ArrayList,我怀疑“或其他大数”是指随机数,而是指其他特定数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多