【发布时间】:2014-02-17 11:59:39
【问题描述】:
需要更改容器类型:
import java.util.*;
public class MyContainers {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("title1");
list.add("title2");
System.out.println(list.indexOf("title1"));
// change container type
Set<String> set = new HashSet<String>(list);
}
}
但最好只使用一个变量。我写了这样的代码,但有一个限制(见评论):
import java.util.*;
public class MyContainers {
public static void main(String[] args) {
Collection<String> list = new ArrayList<String>();
list.add("title1");
list.add("title1");
System.out.println(list);
// Can't call indexOf because there are no such method in inteface Collection
//System.out.println(list.indexOf("title1"));
// change container type
list = new HashSet<String>(list);
System.out.println(list);
}
}
请帮我解决这些问题:
- 是否可以对不同的容器使用一个变量并使用全套容器方法?
- 是否可以将 List 转换为
Map? 请展示代码示例。
【问题讨论】:
-
你不能同时拥有它!如果您想为不同的集合使用通用类型,您将不得不接受您将无法调用其中一些集合不存在的方法(例如
indexOf对 @ 没有意义987654325@). -
[1] 如果您定义每个类的方法行为,[2] 如果您定义您希望如何转换它(奇数是键,偶数是值?)。你看,你可以有一个“一个接口规则所有”,但你必须首先指定每个方法对每个结构的含义。
-
只使用一个变量如何“更好”。它实际上更令人困惑,因为你的代码更难推理。 “我在看哪一组?”
标签: java collections