一个特殊HASHMAP的比较问题

bristolcc 2010-08-08 07:09:01
把问题简单化以下,请看如下代码:能根据KEY确认在一个容器中有多少元素属于VALUE(该问题已解决)。现在的问题整好相反,想要根据VALUE确定KEY是否在容器中。前提MAP的基本结构不能改。

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.Map.Entry;

public class MapPrintUtil {

private LinkedHashMap<String, List<String>> maplist = new LinkedHashMap<String, List<String>>();

public void put(String key, String value) {
if (!maplist.containsKey(key)) {
List<String> lst = new ArrayList<String>();
lst.add(value);
maplist.put(key, lst);
} else {
List<String> lst = maplist.get(key);
lst.add(value);
}
}

public void print() {
Set<Entry<String, List<String>>> set = maplist.entrySet();
for (Entry<String, List<String>> entry : set) {
String key = entry.getKey();
List<String> lst = entry.getValue();
print(key, lst);
}
}

private void print(String key, List<String> lst) {
StringBuffer buffer = new StringBuffer();
for (String value : lst) {
buffer.append(key);
buffer.append(" ");
buffer.append(value + "\n");
}
System.out.println(buffer.toString() + "\n");
}

public void compare() {
String info = "a";
String info2 = "take";
int temB_in = 0;
Set<String> it = new LinkedHashSet<String>();

it.add("i");
it.add("you");
it.add("a");
it.add("b");
it.add("take");

for (String in : it) {
if (maplist.containsKey(info)) {
Set<Entry<String, List<String>>> set = maplist.entrySet();
for (Entry<String, List<String>> entry : set) {
if(entry.getKey().equals(info)){ // compare key
List<String> lst = entry.getValue();
for (String value : lst) {
if (value.equals(in)) { // compare value
temB_in = temB_in + 1;
}
}
}
}
}
//根据INFO2,确认KEY是否在容器IT中。。。

}
System.out.println(temB_in);
}

public static void main(String[] args) {
MapPrintUtil util = new MapPrintUtil();
util.put("a", "i");
util.put("a", "you");
util.put("a", "go");
util.put("b", "take");
util.put("b", "get");
util.put("e", "hihi");
util.put("go", "e");
util.put("take", "b");
util.print();
util.compare();
}

}

...全文
185 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bristolcc 2010-08-08
  • 打赏
  • 举报
回复
我的KEY本身并没有重复。大家可以跑一下上面的程序,输出一目了然。我的问题就在于能否使用一个VALUE,判断一个唯一的KEY是否存在。
bristolcc 2010-08-08
  • 打赏
  • 举报
回复
因为这个MAP是专门用来设计一个程序的。如果直接用containsValue判断是没有任何结果的。因为VALUE本身是存放在LIST中。所以才请教下各位。谢谢了。上面的代码是可运行的。大家可以跑一下。
lacus87 2010-08-08
  • 打赏
  • 举报
回复
什么叫结构不能改啊。。。

用containsValue判断

再用keySet遍历拿到所有合适的key

这样算不算改结构啊。
closewbq 2010-08-08
  • 打赏
  • 举报
回复
如果是map这不可能。因为多个key可能对应一个value。
即使有这样的方法,一个value获取出多个key?那又如何这个value是对应的哪个Key呢?
bristolcc 2010-08-08
  • 打赏
  • 举报
回复
不好意思,这个不对,我上面说了原有得map结构不能改动。。。。
private LinkedHashMap<String, List<String>> maplist = new LinkedHashMap<String, List<String>>();
茫茫大海 2010-08-08
  • 打赏
  • 举报
回复

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;


public class MapContainValue {

private HashMap<String, String> data = new HashMap<String, String>();

//模拟着向data中加入数据
public void addValue() {
String key = null;
String value = null;

//所有的值都相同,为value
for(int i=0; i<=10; i++) {
key = new String("key" + i);
value = new String("value");
data.put(key, value);
}
}

//根据指定的value找出与之对应的key,并作为一个数组返回
public String[] getKey(String value) {
//如果没有包含指定的值,则返回null
if(!data.containsValue(value)) {
return null;
}
Set<String> key = data.keySet();
Iterator<String> iterator = key.iterator();
StringBuffer result = new StringBuffer();
//找出与value对应的key,保存在result中
while(iterator.hasNext()) {
String str = iterator.next();
if(data.get(str).equals(value)) {
result.append(str + ":");
}
}

//从result中取出key
String[] keys = result.substring(0, result.length()-1).split(":");
return keys;
}

public void print(String value, String[] keys) {
System.out.println("下面是与" + value + "对应的key值:");
for(String key : keys) {
System.out.println(key);
}
}

public static void main(String[] args) {
MapContainValue mcv = new MapContainValue();
mcv.addValue();
String value = new String("value");
String[] keys = mcv.getKey(value);
mcv.print(value, keys);
}
}


楼主看看,能够满足你的需求!

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧