将多个集合表示为LinkedLists

时间:2015-12-05 19:44:03

标签: java generics linked-list type-conversion

多重集类似于一组,除了重复计数。   我们希望将多个集合表示为链接列表。第一个表示   我想到的是使用LinkedList<T>,其中可以出现相同的项目   几个指数。   例如:multiset

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

可以表示为链表   &#34; Ali Baba&#34;在索引0,&#34;爸爸比尔&#34;在索引1,   &#34;马库斯&#34;在索引2,&#34;阿里巴巴&#34;在索引3,依此类推,共计   6个字符串。

教授希望多重集的表示形式为pair <item,integer>,其中整数(称为项的乘法)告诉我们在多重集中出现多少次项。这样,上面的multiset被表示为链接列表,其中Pair(&#34; Ali Baba&#34;,3)在索引0处,Pair(&#34; Papa Bill&#34;,1)在索引1处,以及Pair (&#34; Marcus&#34;,2)在索引2处。

方法是(他写得好运,他有多好&gt;:[]

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

//good luck
}

该方法将第一种表示转换为Pair表示。   如果in为null,则convert返回null。也可以随意修改输入列表。

他给了我们Pair对 -

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;
  }

}

我是编程新手,而且我一直表现不错,但我不知道如何开始这个程序。从来没有做过这样的事情。

2 个答案:

答案 0 :(得分:0)

您的要求如下:

  • 您的输入:LinkedList
  • 您的输出:LinkedList&gt;

1 - 写一个循环来读取你的输入

2 - 以方便的方式处理/存储它:用户地图。实际上,使用保持订单

的linkedhashmap

2bis - 如果你不能使用Map,直接用两个数组做同样的事情:一个T数组和一个整数数组。您必须管理插入,搜索并保持计数。

3 - 遍历数组,并创建输出

从2开始更容易,如果有效,请替换为2bis

答案 1 :(得分: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