2015-12-05 3 views
0

Мультимножество похоже на набор, за исключением того, что количество дубликатов подсчитывается. Мы хотим представлять мультимножества в виде связанных списков. Первое представление , которое приходит в голову, использует LinkedList<T>, где один и тот же элемент может встречаться на несколько индексов. Например: мультимножествоПредставление мультимножеств как LinkedLists

{ "Ali Baba" , "Papa Bill", "Marcus", "Ali Baba", "Marcus", "Ali Baba" } 

может быть представлена ​​в виде связанного списка строк с «Али-Баба» с индексом 0, «папа Билл» с индексом 1, «Маркус» по индексу 2, «Али Баба "по индексу 3 и т. Д., В общей сложности 6 строк.

Профессор хочет представить мультимножество как pair <item,integer>, где целое число, называемое умножением элемента, сообщает нам, сколько раз элемент возникает в мультимножестве. Таким образом, вышеупомянутый мультимножество представлен как связанный список с Pair («Ali Baba», 3) с индексом 0, Pair («Papa Bill», 1) с индексом 1 и Pair («Marcus», 2) при индексе 2 .

метод (он писал удачи, как мило с его>: [)

public static <T> LinkedList<Pair<T,Integer>> convert(LinkedList<T> in){ 

//good luck 
} 

метод превращает первое представление в представление парного. Если in имеет значение null, convert возвращает null. Также не стесняйтесь изменять список входных данных.

Он дал нам пару классовой

public class Pair<T,S> 
{ 

    // the fields 

    private T first; 

    private S second; 


    // the constructor 
    public Pair(T f, S s) 
    { 

    first = f; 
    second = s; 
    } 

    // the get methods 
    public T getFirst() 
    { 
    return first; 
    } 

    public S getSecond() 
    { 
    return second; 
    } 

// the set methods 
    // set first to v 
    public void setFirst(T v) 
    { 
    first = v; 
    } 

    // set second to v 
    public void setSecond(S v) 
    { 
    second = v; 
    } 

} 

Я новичок в программирование и я делал хорошо, но я понятия не имею, как даже начать эту программу. Никогда раньше ничего подобного не делал.

+0

Можете ли вы использовать другие структуры внутри метода преобразования? Самый простой способ - использовать «Map », где ключ - это элемент из списка, а значение - это счетчик повторения.Затем вы перебираете 'map.entrySet()' для заполнения списка для возврата. – Mati

+0

Боюсь, что нет. –

ответ

0

Если вам разрешено использовать временный LinkedList вы могли сделать что-то подобное:

import java.util.LinkedList; 

public class Main { 

    public static void main(String[] args) { 
     LinkedList<String> test = new LinkedList<String>(); 
     test.add("Ali Baba"); 
     test.add("Papa Bill"); 
     test.add("Marcus"); 
     test.add("Ali Baba"); 
     test.add("Marcus"); 
     test.add("Ali Baba"); 
     LinkedList<Pair<String, Integer>> result = convert(test); 
     for(Pair<String, Integer> res : result) { 
      System.out.println(res.getFirst() + " :" + res.getSecond()); 
     } 
    } 

    public static <T> LinkedList<Pair<T, Integer>> convert(LinkedList<T> in) { 
     LinkedList<Pair<T, Integer>> returnList = new LinkedList<>(); 
     LinkedList<T> tmp = new LinkedList<T>(); 
     // iterate over your list to count the items 
     for(T item : in) { 
      // if you already counted the current item, skip it 
      if(tmp.contains(item)) { 
       continue; 
      } 
      // counter for the current item 
      int counter = 0; 

      //iterate again over your list to actually count the item 
      for(T item2 : in) { 
       if(item.equals(item2)) { 
        counter ++; 
       } 
      } 
      // create your pair for your result list and add it 
      returnList.add(new Pair<T, Integer>(item, counter)); 

      // mark your item as already counted 
      tmp.add(item); 
     } 
     return returnList; 
    } 
} 

с этими словами я получить желаемый выход

Ali Baba :3 
Papa Bill :1 
Marcus :2 
+0

Я получаю сообщение об ошибке из вашего returnList.add (новая пара (item, counter)); –

+0

говорит - нестатическая переменная, на которую нельзя ссылаться из статического контекста –

+0

Вы объявили свой returnList внутри конвертера метода или как член класса? Поскольку ваш метод статичен, returnList должен быть объявлен внутри него! –

0

Ваших требований ставить:

  • вашего вход: LinkedList
  • Вашего выхода: LinkedList>

1 - написать цикл для чтения вашего входа

2 - процесс/магазина это удобно: карта пользователя. На самом деле, используйте linkedhashmap, который сохраняет порядок

2bis - если вы не можете использовать карту, выполните одно и то же непосредственно с двумя массивами: массив из T и массив целых чисел. Вы должны управлять вставкой, поиском и держать счет.

3 - перебрать массивы, и создать свой выход

Это легче начать с 2, и если она работает, замените 2bis

Смежные вопросы