有必要更改容器类型:
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);
}
}
请帮我解决这些问题:
Map
?
请显示代码示例。答案 0 :(得分:4)
如果某个接口中不存在某些方法,则由于某种原因它不存在。不要试图有一个解决方法,以获得它,这通常会导致麻烦。例如,对Set
接口采用indexOf
方法没有任何意义。
但是,有时候从现有的对象构造一个不同类型的新对象会很有用,例如,如果你有一个ArrayList
并且你不想有重复,那么它确实有意义。将其转换为HashSet
。
你应该选择最适合你需要的界面,如果你找不到,你可以随时实现自己的课程。
答案 1 :(得分:0)
我找到了解决办法,这样好吗?
import java.util.*;
public class MyContainers {
static Collection<String> collection = new ArrayList<String>();
public static void main(String[] args) {
collection.add("title1");
collection.add("title1");
System.out.println(collection); // [title1, title1]
useIndexOf();
System.out.println(collection); // [title1, title1]
deleteDublication();
System.out.println(collection); // [title1]
}
public static void useIndexOf()
{
List<String> list = new ArrayList<String>(collection);
System.out.println(list.indexOf("title1")); // 0
// Change container type back to universal
collection = list;
}
public static void deleteDublication() {
Set<String> set = new HashSet<String>(collection);
collection = set;
}
}