java.util.Arrays $ ArrayList无法强制转换为java.util.LinkedHashSet

时间:2015-09-29 11:48:08

标签: java arrays 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的帮助下执行此操作会更好?

2 个答案:

答案 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.frequencyCollection接受任何实现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>