除了重复计数之外,多集与集相似。我们希望将多集表示为链表。第一个表示脑海中浮现的使用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