[英]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;
}
}
我是編程新手,並且一直做得不錯,但是我什至不知道如何啟動該程序。 以前從未做過這樣的事情。
您的要求放在:
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.