多重集类似于一组,除了重复计数。
我们希望将多个集合表示为链接列表。第一个表示
我想到的是使用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;
}
}
我是编程新手,而且我一直表现不错,但我不知道如何开始这个程序。从来没有做过这样的事情。
答案 0 :(得分:0)
您的要求如下:
1 - 写一个循环来读取你的输入
2 - 以方便的方式处理/存储它:用户地图。实际上,使用保持订单
的linkedhashmap2bis - 如果你不能使用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