我想问一下我可以在我的项目中使用的集合。以下是我的要求。
我不希望删除重复距离(密钥对)。
我已经尝试使用TreeMap
将距离作为键和移动作为值。
但它正在删除重复项。我也不能把手机当成钥匙,因为, 否则它将根据移动的价值对该对进行排序。所以请告诉我该怎么做。
TreeMap tree = new TreeMap();
while(rs.next()){
// obtaining dist and mob values here
tree.put(dist, mob);
}
Set set=tree.entrySet();
Iterator itr=set.iterator();
out.println("distance " + "mobile");
while(itr.hasNext()){
Map.Entry m=(Map.Entry)itr.next();
out.println(m.getKey()+" "+m.getValue()+"\n");
}
我希望按照相应的增加距离的顺序获取所有移动电话号码。这是我到目前为止所尝试的,但问题是它消除了重复的距离。
答案 0 :(得分:2)
如果要为每个键保留多个值,则需要MultiMap
。番石榴有几个,包括一对具有排序值的夫妇。例如,查看TreeMultiMap
。
Multimap的实现,其键和值按其自然顺序或提供的比较器排序。
答案 1 :(得分:1)
使用与
参数相同的TreeMapTreeMap<Integer, LinkedList<Integer>> tMap=new TreeMap<Integer, LinkedList<Integer>>();
这里将距离视为关键,将mobileNo视为值。根据您的陈述,对于相同的距离,有几个mobileNo值(因为距离不是唯一的)。因此,对于value字段,我们可以使用LinkedList或ArrayList。
TreeMap将以排序的方式存储密钥。因此,您可以根据密钥和密钥的所有值打印TreeMap。
完整代码如下:
import java.util.Collections;
import java.util.LinkedList;
import java.util.TreeMap;
public class MultiValueCollection {
public static void main(String[] args) {
// TODO Auto-generated method stub
MultiValueCollection mCollection=new MultiValueCollection();
TreeMap<Integer, LinkedList<Integer>> tMap=new TreeMap<Integer, LinkedList<Integer>>();
mCollection.addMobileNumberByDistance(tMap, 40, 65655423);
mCollection.addMobileNumberByDistance(tMap, 40, 76785647);
mCollection.addMobileNumberByDistance(tMap, 40, 85785852);
mCollection.addMobileNumberByDistance(tMap, 40, 96786344);
mCollection.addMobileNumberByDistance(tMap, 40, 57657354);
mCollection.addMobileNumberByDistance(tMap, 20, 13543353);
mCollection.addMobileNumberByDistance(tMap, 20, 23453456);
mCollection.addMobileNumberByDistance(tMap, 30, 33353544);
mCollection.addMobileNumberByDistance(tMap, 30, 43534554);
mCollection.addMobileNumberByDistance(tMap, 30, 59789785);
mCollection.printMobileNumbersByDistance(tMap);
}
public void addMobileNumberByDistance(TreeMap<Integer, LinkedList<Integer>> tMap, int distance, int mobileNo)
{
LinkedList<Integer> list=null;
if(tMap.get(distance)==null)
{
list=new LinkedList<Integer>();
}else
{
list=tMap.get(distance);
}
list.push(mobileNo);
tMap.put(distance, list);
}
public void printMobileNumbersByDistance(TreeMap<Integer,LinkedList<Integer>> distNumberMap)
{
LinkedList<Integer> list;
for(int n : distNumberMap.keySet())
{
list=distNumberMap.get(n);
Collections.sort(list);//Add this line if mobileNo needs to be sorted for a given distance
for(int k : list)
{
System.out.println("key "+n+" value "+k);
}
}
}
}
答案 2 :(得分:0)
有几种方法可以实现这一点。以下是您可能没有考虑但可能有效的方法:
1)定义一个包含&#34;键&#34;的新类。和&#34;价值&#34;作为实例字段。
2)实现Comparable接口,即编写自己的订购规则,包括如何处理打折。
3)使用通过Comparable进行排序的集合。