我与Java编程完全脱节,并且正在谷歌的Udacity课程作为复习。我正在浏览Sunshine应用程序的第1课,讲师通过声明一个字符串数组然后将其转换为ArrayList来选择创建虚假数据。
代码如下:
aspx
我想知道使用这种转换方法有什么好处吗?为什么不立即将数据声明为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));
谢谢!
答案 0 :(得分:13)
“正常”方式是使用第三种形式:
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");
List是一个接口,使用它可以使用另一个类似LinkedList的实现类(仅用于几个元素)。也可用作参数类型。
这使用Collections实用程序类添加varargs ...
字符串。并且在引擎盖下使用String[]
用于那些参数。
第一个选项的.asList
足以让List<String>
无法添加。
答案 1 :(得分: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);
此外,您可以遍历数组并添加它。
for(int i = 0; i < primeNums.length; ++i)
primes.add(primeNums[i]);
答案 2 :(得分:5)
第一种方法:
Arrays.asList
使用内部ArrayList
类为给定的特定数组创建固定大小列表,该类只是数组本身的包装,使其更有效创建数组的完整副本。List
变量而不是ArrayList
变量中,这样可以提供更大的灵活性。第二种方法:
如果您使用该方法,请至少以通用方式声明List
:
ArrayList<String> weatherForecast = new ArrayList<>();
替代方案:
请注意,您可以直接执行:
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"
);
答案 3 :(得分:3)
性能方面,您的答案可能会更好,因为您只是实例化一个数据结构(ArrayList)并向其添加元素。除了可读性部分,您的讲师将实例化两个数组,然后将其转换为arrayList,这是一个可扩展的数组。它可能没有太大的性能影响,但你的表现肯定更快。
答案 4 :(得分:2)
两者都在做同样的事情;但代码可读性很重要;
考虑一个例子 -
允许应用程序将值放入最大容量的数组中,并且per this link可以在数组中允许最大Integer.MAX_VALUE - 5
个值。
一旦填充了数组,开发人员就需要像上面那样将其转换为List。
现在,想想如果某人在这种情况下使用add
方法,那么明确的代码行将会增长,代码将变得难以阅读。
因此,在这种情况下,首选操作将使用Arrays.asList(data)
;
答案 5 :(得分:1)
没有特别的优势。
在第一种情况下,您不必要将Arrays.asList()
创建的数组包装为新数组。
如果数组内容是静态的,请使用第二种情况。