List<? super T>
和之间有什么区别List<? extends T>
?
我曾经使用List<? extends T>
,但它不允许我添加元素list.add(e)
,而List<? super T>
它.
我需要创建一个Set
初始值.
Set<String> h = new HashSet<String>();
h.add("a");
h.add("b");
Run Code Online (Sandbox Code Playgroud)
有没有办法在一行代码中执行此操作?例如,它对最终的静态字段很有用.
我想将数组转换为Java中的Set.有一些明显的方法可以做到这一点(即使用循环),但我想要一些更整洁的东西,如:
java.util.Arrays.asList(Object[] a);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我想java.util.Collection
根据谓词过滤一个.
将a转换Map<key,value>
为a 的最佳方法是List<value>
什么?只是迭代所有值并将它们插入列表中或者我忽略了什么?
这类似于这个问题: 如何在Java中将int []转换为Integer []?
我是Java的新手.我怎么能转换List<Integer>
到int[]
Java中?我很困惑,因为List.toArray()
实际上返回一个Object[]
,可以强制转换为虚空Integer[]
或int[]
.
现在我正在使用循环来执行此操作:
int[] toIntArray(List<Integer> list){
int[] ret = new int[list.size()];
for(int i = 0;i < ret.length;i++)
ret[i] = list.get(i);
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我相信有更好的方法可以做到这一点.
对于Java语言有些新意,我试图让自己熟悉一个可能遍历列表(或者可能是其他集合)以及每个集合的优点或缺点的所有方法(或者至少是非病态方法).
给定一个List<E> list
对象,我知道以下循环所有元素的方法:
while
/ do while
循环以及)// Not recommended (see below)!
for (int i = 0; i < list.size(); i++) {
E element = list.get(i);
// 1 - can call methods of element
// 2 - can use 'i' to make index-based calls to methods of list
// ...
}
Run Code Online (Sandbox Code Playgroud)
注意:正如@amarseillan指出的那样,这种形式对于迭代List
s来说是一个糟糕的选择,因为该get
方法的实际实现可能不如使用时那样有效Iterator
.例如,LinkedList
实现必须遍历i之前的所有元素以获得第i个元素.
在上面的例子中,List
实现没有办法"保存它的位置"以使未来的迭代更有效.因为ArrayList
它并不重要,因为复杂性/成本get
是恒定时间(O(1)),而a LinkedList
是它与列表的大小(O(n))成比例.
有关内置Collections
实现的计算复杂性的更多信息,请查看此问题 …
Java中是否有任何内置方法允许我们将逗号分隔的String转换为某个容器(例如数组,List或Vector)?或者我需要为此编写自定义代码?
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
Run Code Online (Sandbox Code Playgroud)