java怎么获取map的key

java怎么获取map的key,第1张

java 获取map中所有的key和value值

javautilIterator 对 collection 进行迭代的迭代器。

javautilIterator it = mapentrySet()iterator();

while(ithasNext()){

javautilMapEntry entry = (javautilMapEntry)itnext();

entrygetKey() //返回对应的键

entrygetValue() //返回对应的值

}

以前遍历Map key-value比较习惯的方式是先获取Map中的所有key值,

然后根据key,依次从Map中去数据,基本方式如下:

Map<String,String> testData = new HashMap<String, String>();

Set<String> keys = testDatakeySet();

for(String key :keys){

Systemoutprintln(key+" "+testDataget(key));

}

上述其中是第一种方法,原来一直用上述方法主要是自己有点懒,有了一种方法后就觉得够用的了,今天看源码,发现还Map接口中还有一个Entry<K,V>的接口,对应的还有一个 Set<MapEntry<K, V>> entrySet();方法。

也就是说其实Map中的每条key-value数据对应着一个Entry,这样的话遍历Map其实就是要取出每个Entry,也就有了第二种遍历方法:

Set<Entry<String, String>> entries = testDataentrySet();

for (Entry<String, String> entry : entries) {

Systemoutprintln(entrygetKey()+":"+entrygetValue());

}

当少量的数据时,上述两种方法的效率是差不多的,当数据比较多时,第二种还是要比第一种快。

当然上述说的两种遍历针对的情况是遍历出key-value,如果是只想遍历key或value,大可不必用以上的方法了,Map中提供了Set<K> keySet()和Collection<V> values()。

重写自定义对象的hashcode()方法,让内容相同的对象返回一样的hashcode默认情况自定义对象是以内存地址为hashcode,你“重新创建一个一样的对象”,存在“重新创建”就会导致对象不一样所以要重写覆盖hashcode方法才能获取到map值

另外,也可以低层一点,你的自定义对象上设一个int

id属性

而Map转为以id为键,比如Map<int,

Value>。

循环遍历,查询到值相同的,就记录下, 然后保存到另一个Map即可

下面按照要求,写了一个参考代码,读完测试一下就懂了

import javautilArrayList;

import javautilArrays;

import javautilHashMap;

import javautilMap;

import javautilTreeMap;

public class Demo {

public static void main(String[] args) {

TreeMap<String, Integer> map = new TreeMap<String, Integer>();

mapput("a", 1);

mapput("b", 2);

mapput("c", 1);

mapput("d", 2);

//result 的键 是 Integer, 值是ArrayList,因为需要存的可能不是一个

HashMap<Integer, ArrayList<String>> result = new HashMap<Integer, ArrayList<String>>();

for (MapEntry<String, Integer> entry : mapentrySet()) {

String k=entrygetKey();

int v=entrygetValue();

if(resultcontainsKey(v)){//如果存在

resultget(v)add(k);

}else{//如果不存在

resultput(v, new ArrayList<String>(ArraysasList(k)));

}

}

Systemoutprintln(result);

}

}

你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦?使用MapEntry类,你可以得到在同一时间得到所有的信息。

标准的Map访问方法如下:

Set keys = mapkeySet( );

if(keys != null) {

Iterator iterator = keysiterator( );

while(iteratorhasNext( )) {

Object key = iteratornext( );

Object value = mapget(key);

;…

;}

}

然后,这个方法有一个问题。从Map中取得关键字之后,我们必须每次重复返回到Map中取得相对的值,这是很繁琐和费时的。

幸运的是,这里有一个更加简单的途径。Map类提供了一个称为entrySet()的方法,这个方法返回一个MapEntry实例化后的对象集。

接着,MapEntry类提供了一个getKey()方法和一个getValue()方法,因此,上面的代码可以被组织得更符合逻辑。举例如下:

Set entries = mapentrySet( );

if(entries != null) {

Iterator iterator = entriesiterator( );

while(iteratorhasNext( )) {

MapEntry entry =iteratornext( );

Object key = entrygetKey( );

Object value = entrygetValue();

;…

}

}

尽管增加了一行代码,我们却省略了许多对Map不必要的"get"调用。同时,提供给开发人员一个同时保持了关键字和其对应的值的类。MapEntry同时也提供了一个setValue()方法,程序员可以使用它修改map里面的值。

Hashtable内部排列的方式是散列排布,所以当输出信息时会是无序的。为了能保证输出的数据按照顺序排列,不要渴望用java自带的函数来对

Hashtable对象进行调整处理。当我们获取Hashtable里的KEY和VALUE时,一般都运行了MapEntry类来转换,好,现在就用这

个类来作文章,我具体写了一个方法。

代码:

/

方法名称:getSortedHashtable

参数:Hashtable h 引入被处理的散列表

描述:将引入的hashtableentrySet进行排序,并返回

/

public static MapEntry[] getSortedHashtable(Hashtable h){

Set set = hentrySet();

MapEntry[] entries = (MapEntry[])settoArray(new MapEntry[setsize()]);

Arrayssort(entries,new Comparator(){

public int compare(Object arg0, Object arg1) {

Object key1 = ((MapEntry)arg0)。getKey();

Object key2 = ((MapEntry)arg1)。getKey();

return ((Comparable)key1)。compareTo(key2);

}

});

return entries;

}

调用这个方法:

MapEntry[] set = getSortedHashtable(t);

//perportyTable

for (int i=0;i<setlength;i++){

Systemoutprintln(set[i]getKey()。toString());

Systemoutprintln(set[i]getValue()。toString());

}

以上就是关于java怎么获取map的key全部的内容,包括:java怎么获取map的key、java中的Map的键如果是自己写的一个类的对象,怎么根据这个键获取值、java 在treemap 中怎么获取有相同值的键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9333600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存