作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开始使用 Deitel Harvey 的书学习 Java 泛型集合 - 但我在理解下面的三行代码时遇到了困难 - 通过初始化和添加数组的相关值(颜色),它们是否都执行相同的操作到 LinkList 变量 (list1)。第二种方法和第三种方法是如何工作的——我有点难以理解数组如何被视为一个列表。据我所知,数组不是动态数据结构,它们具有固定大小的长度,添加/删除数组中的元素不能与一般的列表相比,在运行时完成。
String[] colors = { "black", "white", "blue", "cyan" };
List< String > list1 = new LinkedList< String >();
// method 1 of initalizing and adding elments to the list
for (String color : colors)
list1.add(color);
// method 2 of initializing and adding elements to the list
List< String > list1 = new LinkedList< String > (Arrays.asList(colors));
// method 3 of initializing and adding elements to the list
List< String > list1 = Arrays.asList(colors);
请帮助我理解我上面的疑问,不要评判我,因为我对此还是个新手。谢谢思南
最佳答案
实际上,回答这个问题不需要泛型知识。
正如您所正确理解的那样,标识符数组是静态的,因为您不能向它们添加元素或删除它们。
Lists ,但是,通常允许这些操作。
Arrays.asList()
返回的 List
确实有add
/remove
方法(否则它将不是有效的 List
)。 但是实际上调用这些方法将抛出 UnsupportedOperationException
恰好因为您实际上不能向数组添加元素(此 List
只是一个 View /包装器)。
不在结构上修改列表的操作(即不改变列表中元素的数量)是完全可能的:set(int, E)
在 Arrays.asList()
返回的 List
上工作得很好。
关于Java 泛型集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12802338/
我是一名优秀的程序员,十分优秀!