ArrayList声明与转换

Eli*_*lik 14 java string arraylist

我与Java编程完全脱节,并且正在谷歌的Udacity课程作为复习.我正在浏览Sunshine应用程序的第1课,讲师通过声明一个字符串数组然后将其转换为ArrayList来选择创建虚假数据.

代码如下:

String[] data = {
            "Mon 6/23?- Sunny - 31/17",
            "Tue 6/24 - Foggy - 21/8",
            "Wed 6/25 - Cloudy - 22/17",
            "Thurs 6/26 - Rainy - 18/11",
            "Fri 6/27 - Foggy - 21/10",
            "Sat 6/28 - TRAPPED IN WEATHERSTATION - 23/18",
            "Sun 6/29 - Sunny - 20/7"
    };
    List<String> weatherForecast = new ArrayList<>(Arrays.asList(data));
Run Code Online (Sandbox Code Playgroud)

我想知道使用这种转换方法有什么好处吗?为什么不立即将数据声明为ArrayList:

    ArrayList weatherForecast = new ArrayList();
    weatherForecast.add("Today - Sunny - 88/63");
    weatherForecast.add("Tomorrow - Foggy = 70/46");
    weatherForecast.add("Weds - Cloudy - 72/63");
    weatherForecast.add("Thurs 6/26 - Rainy - 18/11");
    weatherForecast.add("Sat 6/28 - TRAPPED IN WEATHERSTATION - 23/18");
    weatherForecast.add("Sun 6/29 - Sunny - 20/7");
Run Code Online (Sandbox Code Playgroud)

谢谢!

Joo*_*gen 12

"正常"的方式是使用第三种形式:

List<String> weatherForecast = new ArrayList<>();
Collections.addAll(weatherForecast,
        "Mon 6/23?- Sunny - 31/17",
        "Tue 6/24 - Foggy - 21/8",
        "Wed 6/25 - Cloudy - 22/17",
        "Thurs 6/26 - Rainy - 18/11",
        "Fri 6/27 - Foggy - 21/10",
        "Sat 6/28 - TRAPPED IN WEATHERSTATION - 23/18",
        "Sun 6/29 - Sunny - 20/7");
Run Code Online (Sandbox Code Playgroud)

List是一个接口,使用它可以使用另一个类似LinkedList的实现类(仅用于几个元素).也可用作参数类型.

这使用Collections实用程序类添加varargs ...字符串.并且在引擎盖下String[]用于那些args.

.asList一个选项足以让List<String>不加入.


Uma*_*nth 5

两者都做同样的事情.

但不同的是,第一个使它更具可读性.您完全知道要将天气预报信息添加到列表中.

在第二种情况下,你只是继续添加信息,使用add(),这实际上看起来比另一个有点笨拙.

考虑您要将素数添加到列表中

First Approach:
int [] primeNums = {2, 3, 5, 7, 11, 13, 17, 19};
List<Integer> primes = new ArrayList<>(Arrays.asList(primeNums));

Second Approach:
List<Integer> primes = new ArrayList<>();
primes.add(2);
primes.add(3);
primes.add(5);
primes.add(7);
primes.add(11);
primes.add(13);
primes.add(17);
primes.add(19);
Run Code Online (Sandbox Code Playgroud)

您也可以遍历数组并添加它.

for(int i = 0; i < primeNums.length; ++i)
  primes.add(primeNums[i]);
Run Code Online (Sandbox Code Playgroud)


Jea*_*ard 5

第一种方法:

  • 更好的可读性(可以更好,见我的替代方案); 所有数据都直接用逗号分隔,而不是通过方法调用来添加每个数据.
  • Arrays.asList使用内部类为给定的特定数组创建固定大小的列表,内部ArrayList类只是数组本身的包装,使其更有效,然后创建数组的完整副本.
  • 您将数据保存在List变量而不是ArrayList变量中,这样可以提供更大的灵活性.

第二种方法:

  • 你使用的是原始类型,一开始就很糟糕.
  • 没有优势.

如果您使用该方法,请至少List以通用方式声明:

ArrayList<String> weatherForecast = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

替代方案

请注意,您可以直接执行:

List<String> weatherForecast = Arrays.asList(
    "Mon 6/23?- Sunny - 31/17",
    "Tue 6/24 - Foggy - 21/8",
    "Wed 6/25 - Cloudy - 22/17",
    "Thurs 6/26 - Rainy - 18/11",
    "Fri 6/27 - Foggy - 21/10",
    "Sat 6/28 - TRAPPED IN WEATHERSTATION - 23/18",
    "Sun 6/29 - Sunny - 20/7"
);
Run Code Online (Sandbox Code Playgroud)