将多集表示为LinkedLists



除了重复计数之外,多集与集相似。我们希望将多集表示为链表。第一个表示脑海中浮现的使用LinkedList<T>,其中相同的项目可以出现在几个指数。例如:多集

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

可以表示为链接列表索引0处为"Ali Baba"、索引1处为"Papa Bill"的字符串,"马库斯"在指数2,"阿里巴巴"在指数3,等等,总共6个字符串。

教授希望将多集表示为pair <item,integer>,其中称为项的乘积的整数告诉我们项在多集中出现的次数。通过这种方式,上述多集被表示为索引0处的Pair("Ali Baba",3)、索引1处的Paire("Papa Bill",1)和索引2处的Pairs("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,您可以执行以下操作:

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

您提出的要求:

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

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

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

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

3-迭代您的数组,并创建您的输出

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

相关内容

  • 没有找到相关文章

最新更新