老师,提几个问题

来源:2-2 实战:购物车案例

小蜗牛有大理想

2020-03-15

1 list初始化方法,既然已经展示出来了?为什么不能copy出来呢?希望能放开copy的权限。当然,如果慕课网有要求那就算了。
2 关于初始话的地方,我是用的是guava28.2,jdk必须是jdk8已上的,希望这个guava和jdk版本对应的关系,您可以补上,谢谢!
3 关于初始化的地方,Stream.of方法,我使用的是jdk-8u77-windows-x64 jar包,为什么没有of方法呢?具体在哪个package中呢?
4 既然有内存泄漏的风险,我们通常都不会使用这种方法。这种方法要么不要拿出来,要么放到最后。不可能为了提高效率降低安全性,在正常开发中,这样很容易出事故的。
5 Lists.of方法我使用的时jdk9,好像也没有这个方法,请教在那个package中
希望您能一一回复,谢谢!

写回答

2回答

张小喜

2020-03-15

  1. 你说的不能拷贝,是指视频中弹出的锚点说明文档吗?我拷给你。

  2. 课程使用的jdk版本都是1.8的。因为这是后面补充的说明文档,所以提到了一些后面的知识点。这个Guava后面有一章单独讲如何使用。

  3. 文档已经更新,补充了使用的package信息。of方法在jdk8中就有,你的开发工具是不是编译级别设置的不对?如果是IDEA,可以排查一下这个地方的设置

   //img.mukewang.com/szimg/5e6e0e55095aaed609150374.jpg

   4. 因为后面几种创建方法都还没讲到,所以就采用了双大括号这种初始化方法,也是有小伙伴反馈不太理解,所以才补充的说明文档,也重点标示出这种方法的缺点,一会儿再补充提示一下。

   5. 这里有个错误,谢谢同学给指出。不是Lists,而是List。文档已经更新了。

0
1
小蜗牛有大理想
非常感谢!
2020-03-18
共1条回复

张小喜

2020-03-15

### 常用List集合初始化方式


#### 1. 先创建List再赋值


标准方式,先创建集合对象,然后逐个调用``add``方法初始化。**用起来比较繁琐,不太方便!**


```java

List<Integer> list = new ArrayList<>();

list.add(1);

list.add(2);

list.add(3);

```




#### 2. 使用``{{}}``双大括号初始化


使用匿名内部类完成初始化。外层的``{}``定义了一个ArrayList的匿名内部类,内层的``{}``定义了一个实例初始化代码块。**有内存泄漏的风险!不建议在生产项目中使用!**


```java

List<Integer> list3 = new ArrayList<Integer>(){

    {

        add(1);

        add(2);

        add(3);

    }

};

```




#### 3. 使用``Arrays.asList``


使用Arrays的静态方法``asList``初始化。**返回的list集合是不可变的!**


```java

import java.util.Arrays;

List<Integer> list = Arrays.asList(1, 2, 3);

```




#### 4. 使用``Stream``(JDK8以上)


使用JDK8引入的Stream的``of``方法生成一个stream对象,调用``collect``方法进行收集,形成一个List集合。


```java

import java.util.stream.Stream;

List<Integer> list = Stream.of(1, 2, 3).collect(Collectors.toList());

```




#### 5. 使用Google Guava工具集``Lists``(需要引入Guava工具包)(Guava28.2为最新版本,对应JDK8及以上)


借助Google Guava工具集中的``Lists``工具类初始化。**需要引入Guava包才能用!**


```java

import com.google.common.collect.Lists;

List<Integer> list = Lists.newArrayList(1, 2, 3);

```




#### 6. 使用``List``(JDK9以上)


使用JDK9引入的``List.of``方法完成初始化。


```java

import com.sun.tools.javac.util.List;

List<Integer> list = List.of(1, 2, 3);

```


1
0

Java高效编程技巧实践 告别996

可以改变的编程效率

1451 学习 · 326 问题

查看课程