Java中的泛型集

时间:2020-01-09 10:36:00  来源:igfitidea点击:

可以泛化Java的Set接口(java.util.Set)。换句话说,可以为Set的实例指定一种类型,因此只能插入该类型的实例并从其中读取。这是一个例子:

Set<String> set = new HashSet<String>;

现在,此集合仅针对" String"实例,这意味着只能将" String"实例放入该集合。如果我们尝试在此Set中添加其他内容,则编译器会抱怨。

通用类型检查仅在编译时存在。在运行时,可以对代码进行调整,以使字符串集具有插入了字符串的其他对象。不过,这是一个坏主意。

将元素添加到泛型集

就像通常一样,将元素添加到通用Set中是使用add()方法完成的:

Set<String> set = new HashSet<String>;

String string1 = "a string";
set.add(string1);

那么,最大的区别是什么?好吧,如果我们尝试将不是String实例的元素添加到上述示例中的Set中,则编译器会抱怨。这是一个非常不错的额外类型检查。

迭代泛型集

我们可以使用迭代器来迭代通用的Set,如下所示:

Set<String> set = new HashSet<String>;
    
Iterator<String> iterator = set.iterator();

while(iterator.hasNext()){
  String aString = iterator.next();
}

注意,没有必要强制转换从下一次调用iterator.next()返回的对象。因为Set是通用的(具有类型),所以编译器知道它包含String实例。因此,即使它来自它的"迭代器",也不必强制转换从它获得的对象。

我们还可以使用新的for循环,如下所示:

Set<String> set = new HashSet<String>;

for(String aString : set) {
    System.out.println(aString);
}

注意如何在for循环的括号内声明一个String变量。对于每次迭代("集合"中的每个元素),此变量都包含当前元素(当前字符串)。