java.util.Arrays$ArrayList 无法转换为 java.util.LinkedHashSet
java.util.Arrays$ArrayList cannot be cast to java.util.LinkedHashSet
我想编写一个 java 程序,它会给出给定 String
中字母出现的频率。
我试过这个:
public void frequencyOfLetter() {
String strMOd[] = "Hurricane.".split("");
LinkedHashSet<String> lhs = (LinkedHashSet<String>) Arrays.asList(strMOd);
for (String letter : lhs) {
if (lhs.contains(letter)) {
System.out.println(letter + " " + Collections.frequency(lhs, letter));
}
}
}
为什么我使用 LinkedHashSet
因为我不想重复。然而,这给我的错误是这种转换不正确。
所以我用它作为几行额外的代码:
List<String> lhs = Arrays.asList(strMOd);
LinkedHashSet<String> lhsmod = new LinkedHashSet<String>(lhs);
为什么以前的代码会出现该错误,在 LinkedHashSet
的帮助下这样做有什么好处?
转换将失败,因为两种类型不相关:LinkedHashSet
既不是 Arrays$ArrayList
的超类型也不是其子类型,因此无法引用 Arrays$ArrayList
包含可以转换为 LinkedHashSet
.
的内容
您可以非常轻松地从数组创建 LinkedHashSet:
LinkedHashSet<String> lhs = new LinkedHashSet<>(Arrays.asList(strMOd));
此代码与您以前的代码之间的区别在于,此代码创建了一个新的 LinkedHashSet
实例,并复制了列表中的元素。
两件事,
首先,Arrays.asList(strMOd)
returns 你 ArrayList
是在 Array.java
中定义的内部 class 并且它不能转换为 LinkedHashSet
作为两者都是不同的类型。
其次,对于您的示例,您不需要进行任何转换或转换。
Arrays.asList
返回的 ArrayList
实现了 List<>
,而 Collections.frequency
接受任何实现 Collection
的东西,并且 List
扩展了该接口,你可以这样做。
String strMOd[] = "Hurricane.".split("");
List<String> lhs = Arrays.asList(strMOd);
for (String letter : lhs) {
if (lhs.contains(letter)) {
System.out.println(letter + " "
+ Collections.frequency(lhs, letter));
}
}
我想编写一个 java 程序,它会给出给定 String
中字母出现的频率。
我试过这个:
public void frequencyOfLetter() {
String strMOd[] = "Hurricane.".split("");
LinkedHashSet<String> lhs = (LinkedHashSet<String>) Arrays.asList(strMOd);
for (String letter : lhs) {
if (lhs.contains(letter)) {
System.out.println(letter + " " + Collections.frequency(lhs, letter));
}
}
}
为什么我使用 LinkedHashSet
因为我不想重复。然而,这给我的错误是这种转换不正确。
所以我用它作为几行额外的代码:
List<String> lhs = Arrays.asList(strMOd);
LinkedHashSet<String> lhsmod = new LinkedHashSet<String>(lhs);
为什么以前的代码会出现该错误,在 LinkedHashSet
的帮助下这样做有什么好处?
转换将失败,因为两种类型不相关:LinkedHashSet
既不是 Arrays$ArrayList
的超类型也不是其子类型,因此无法引用 Arrays$ArrayList
包含可以转换为 LinkedHashSet
.
您可以非常轻松地从数组创建 LinkedHashSet:
LinkedHashSet<String> lhs = new LinkedHashSet<>(Arrays.asList(strMOd));
此代码与您以前的代码之间的区别在于,此代码创建了一个新的 LinkedHashSet
实例,并复制了列表中的元素。
两件事,
首先,Arrays.asList(strMOd)
returns 你 ArrayList
是在 Array.java
中定义的内部 class 并且它不能转换为 LinkedHashSet
作为两者都是不同的类型。
其次,对于您的示例,您不需要进行任何转换或转换。
Arrays.asList
返回的 ArrayList
实现了 List<>
,而 Collections.frequency
接受任何实现 Collection
的东西,并且 List
扩展了该接口,你可以这样做。
String strMOd[] = "Hurricane.".split("");
List<String> lhs = Arrays.asList(strMOd);
for (String letter : lhs) {
if (lhs.contains(letter)) {
System.out.println(letter + " "
+ Collections.frequency(lhs, letter));
}
}