簡體   English   中英

將多集表示為LinkedLists

[英]Representing multisets as LinkedLists

多重集與集合相似,不同之處在於重復項的計數。 我們想將多集表示為鏈表。 我想到的第一個表示使用LinkedList<T> ,其中同一項目可以出現在多個索引處。 例如:多集

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

可以表示為字符串的鏈表,索引為0的“ Ali Baba”,索引1的“ Papa Bill”,索引2的“ Marcus”,索引3的“ Ali Baba”,依此類推,總共為6字符串。

教授希望將多重集表示為pair <item,integer> ,其中稱為項目的乘法的整數告訴我們項目在多重集中出現了多少次。 這樣,上述多重集被表示為鏈表,索引為0的Pair(“ Ali Baba”,3),索引1的Pair(“ Papa Bill”,1)和索引2的Pair(“ Marcus”,2) 。

方法是(他寫了好運,他真好>:[)

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

//good luck
}

該方法將第一個表示形式轉換為Pair表示形式。 如果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;
  }

}

我是編程新手,並且一直做得不錯,但是我什至不知道如何啟動該程序。 以前從未做過這樣的事情。

您的要求放在:

  • 您的輸入:LinkedList
  • 您的輸出:LinkedList>

1-編寫循環以讀取輸入

2-以一種方便的方式處理/存儲它:用戶Map。 實際上,使用linkedhashmap可以保持順序

2bis-如果您不能使用Map,則直接對兩個數組執行相同的操作:兩個T數組和一個整數數組。 您必須管理插入,搜索並保持計數。

3-遍歷數組並創建輸出

從2開始比較容易,如果可以,請替換為2bis

如果允許使用臨時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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM