WedX - журнал о программировании и компьютерных науках

Элемент передачи Java Treemap и ArrayList

У меня есть следующий код: карта дерева с массивом фруктов. В функции removeAndAdd я хотел бы удалить [яблоко, апельсин] и добавить его в bList контейнера 2. но на дисплее появилась дополнительная скобка []. Верен ли мой метод?

public class TreeMapEx {

  private TreeMap<Integer, List<String>> tMap = new TreeMap<Integer, List<String>>();
  private List<String> aList = new ArrayList<String>();
  private List<String> bList = new ArrayList<String>();
    public static void main(String[] args) {
       TreeMapEx tm = new TreeMapEx();
        tm.addToTree();
        tm.addToList(1);
        tm.showItem(1);       
        tm.showItem(2);
        tm.removeAndAdd(1);
        tm.showItem(2);

    }

    private void addToTree() {
        tMap.put(1, aList);        
        bList.add("dragonfruit");
        tMap.put(2, bList);

    }

    private void addToList(int item) {
        if (tMap.containsKey(item)) {
            aList = new ArrayList<String>();
            aList.add("apple");
            aList.add("orange");
            tMap.put(item, aList);
            System.out.println(item + " added");
        } else {
            System.out.println(item + " not found");
        }
    }

    private void showItem(int item){

        System.out.println(item+" contain " + tMap.get(item));
    }

      private void removeAndAdd(int item){
          if (tMap.containsKey(item) && tMap.containsValue(aList)) {
          //remove everything from 1 and add to 2
           aList = new ArrayList<String>();
             List<String> temp;
             temp = tMap.get(item);

             bList.add(temp.toString());
          }         
    }

}

Output:
1 added
1 contain [apple, orange]
2 contain [dragonfruit]
2 contain [dragonfruit, [apple, orange]]

Как снять дополнительную скобку [яблоко, апельсин] в контейнере 2.

Что-то вроде этого

1 added
1 contain [apple, orange]
2 contain [dragonfruit]
2 contain [dragonfruit,apple, orange]
27.10.2013

Ответы:


1

Дополнительная скобка [яблоко, апельсин] печатается, потому что в методе showItem используется следующий код.

System.out.println(item+" содержит " + tMap.get(item));

Это равносильно печати элементов списка, используя следующий код.

System.out.println(item+" содержат " + tMap.get(item).toString());

Примечание. tMap.get(item) относится к типу List (Список)

Если вы хотите отображать элементы без дополнительной скобки. Вы можете использовать следующий код:

    private void showItem(int item){
        System.out.println(item+" contain ");
        for(String str:tMap.get(item) )
        {
            System.out.println( str);
        }
    } 

Кроме того, еще одна вещь используется неправильно. См. метод removeAndAdd.

Изменить bList.add(temp.toString()); в bList.addAll(temp);

Если вы используете bList.add(temp.toString()), элементы списка с [яблоком, апельсином] будут добавлены в bList в виде строки. На самом деле, вы хотели бы добавить его с яблоком и апельсином отдельно. Используйте bList.addAll(temp);

Чтобы понять, почему коллекция, такая как печать списка, добавлена ​​дополнительная скобка. См. исходный код java.util.AbstractCollection, который переопределяет метод toString. Код выглядит следующим образом:

public String toString() {
    Iterator<E> it = iterator();
    if (! it.hasNext())
        return "[]";

    StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
        E e = it.next();
        sb.append(e == this ? "(this Collection)" : e);
        if (! it.hasNext())
            return sb.append(']').toString();
        sb.append(',').append(' ');
    }
}
27.10.2013
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]