老师,提几个问题
来源: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回答
-
你说的不能拷贝,是指视频中弹出的锚点说明文档吗?我拷给你。
课程使用的jdk版本都是1.8的。因为这是后面补充的说明文档,所以提到了一些后面的知识点。这个Guava后面有一章单独讲如何使用。
文档已经更新,补充了使用的package信息。of方法在jdk8中就有,你的开发工具是不是编译级别设置的不对?如果是IDEA,可以排查一下这个地方的设置
4. 因为后面几种创建方法都还没讲到,所以就采用了双大括号这种初始化方法,也是有小伙伴反馈不太理解,所以才补充的说明文档,也重点标示出这种方法的缺点,一会儿再补充提示一下。
5. 这里有个错误,谢谢同学给指出。不是Lists,而是List。文档已经更新了。
012020-03-18 -
张小喜
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);
```
10
相似问题