Массивы $ArrayList нельзя преобразовать в 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?

2 ответа

Решение

Приведение не удастся, потому что два типа не связаны: LinkedHashSet не является ни супертипом, ни подтипом Arrays$ArrayListтак что нет никакой ссылки на Arrays$ArrayList может содержать что-то, что может быть приведено к LinkedHashSet,

Вы можете очень легко создать LinkedHashSet из массива:

LinkedHashSet<String> lhs = new LinkedHashSet<>(Arrays.asList(strMOd));

Разница между этим кодом и вашим предыдущим кодом заключается в том, что этот код создает новый экземпляр LinkedHashSetКопирование в элементах списка.

Две вещи,

Первый, 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));
            }

        }
Другие вопросы по тегам