我想写一个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
的帮助下执行此操作会更好?
答案 0 :(得分:1)
转换将失败,因为两种类型不相关:LinkedHashSet
既不是超类型也不是Arrays$ArrayList
的子类型,因此对Arrays$ArrayList
的引用无法包含某些内容可以转换为LinkedHashSet
。
您可以从数组中轻松创建LinkedHashSet:
LinkedHashSet<String> lhs = new LinkedHashSet<>(Arrays.asList(strMOd));
此代码与您之前的代码之间的区别在于此代码创建了LinkedHashSet
的新实例,复制了列表的元素。
答案 1 :(得分:0)
两件事,
首先,Arrays.asList(strMOd)
会返回ArrayList
Array.java
,这是LinkedHashSet
中定义的内部类,并且无法将其转换为ArrayList
,因为两者都是不同的类型。
其次,对于您的示例,您不需要进行任何转换或转换。
Arrays.asList
实施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));
}
}
扩展您可以执行此操作的界面。< / p>
<div class="flexslider" id="yui_3_17_2_2_1443528053909_458">
<ul class="slides" id="yui_3_17_2_2_1443528053909_457">
<li style="width: 100%; float: left; margin-right: -100%; display: list-item;" id="yui_3_17_2_2_1443528053909_456">hello</li>
<li style="width: 100%; float: left; margin-right: -100%; display: none;" id="yui_3_17_2_2_1443528053909_476">hello</li>
<li style="width: 100%; float: left; margin-right: -100%; display: none;">hello</li>
<li style="width: 100%; float: left; margin-right: -100%; display: none;">hello</li>
</ul>
<ul class="flex-direction-nav" id="yui_3_17_2_2_1443528053909_462">
<li><a class="prev" href="#">Previous</a>
</li>
<li id="yui_3_17_2_2_1443528053909_461"><a class="next" href="#" id="yui_3_17_2_2_1443528053909_460">Next</a>
</li>
</ul>
</div>