map 中的键值都可以是啥类型的啊
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了map 中的键值都可以是啥类型的啊相关的知识,希望对你有一定的参考价值。
参考技术A map 中的键值可以是任何类型的。Map获取键值
Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。
Map的接口
Map---实现Map
Map.Entry--Map的内部类,描述Map中的按键/数值对。
SortedMap---扩展Map,使按键保持升序排列
关于怎么使用,一般是选择Map的子类,而不直接用Map类。
下面以HashMap为例。
public static void main(String args[])
HashMap hashmap =new HashMap();
hashmap.put("Item0", "Value0");
hashmap.put("Item1", "Value1");
hashmap.put("Item2", "Value2");
hashmap.put("Item3", "Value3");
Set set=hashmap.entrySet();
Iterator iterator=set.iterator();
while (iterator.hasNext()
Map.Entry mapentry = (Map.Entry) iterator.next();
System.out.println(mapentry.getkey()+"/"+ mapentry.getValue());
注意,这里Map的按键必须是唯一的,比如说不能有两个按键都为null。
如果用过它,就会知道它的用处了。
或者:
Java代码
Set keys = map.keySet( );
if(keys != null)
Iterator iterator = keys.iterator( );
while(iterator.hasNext( ))
Object key = iterator.next( );
Object value = map.get(key);
参考技术B map中分_KEY和——value。
key的要求是重载了“<”操作符的类型。也就是说,即便是自定义的类,只要重载了<,就可以做key值。(重载时需注意,你重载的“<”应满足 当a<b为真时,则b<=a时必为假)
value的要求是提供默认构造函数 或者是有拷贝构造函数。具体记不太清了。
当然也可以用仿函数或自定义比较函数来做。
具体参见
http://blog.csdn.net/feike2008/article/details/5692774 参考技术C 任意类型,自己定义的也可以 参考技术D 什么类型都可以本回答被提问者采纳
scala 基础六 scala Map和元组的操作
1.Map的介绍
Map(映射)是一种可迭代的键值对(key/value)结构。所有的值都可以通过键来获取。Map 中的键都是唯一的。Map 也叫哈希表(Hash tables)。Map 有两种类型,可变与不变,区别在于可变对象可以修改它,而不可变对象不可以。默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类
2.Map 的分类和定义
//不可变Map
var m1=Map("james"->20,"luce"->22);
//可变Map
var m2=scala.collection.mutable.Map("james"->20,"luce"->22);
//指定泛型,如果不指定scala会根据类型自动判断
var m3=scala.collection.mutable.Map[String,Int]();
3.不可变Map的使用
//根据Key获取value 如果key不存在的话会抛出异常 m1("james"); //等同于m1("james") 如果key不存在的话会 返回None m1.get("james"); //给key 设置一个默认值,如果key 不存在就设置为20 不至于抛出异常 m1.getOrElse("tom", 20) //获取所有的key m1.keys //获取所有的value m1.values
4.可变Map的操作
//可变Map var m2=scala.collection.mutable.Map("james"->20,"luce"->22); //产生一个新的对象,不会动态增加 m2+("lili"->18) //不产生新对象直接在m2 中增加对象 m2+=("lili"->18);
5.遍历集合
遍历所有的key 和value 格式for((k,v)<-x){....}
//可变Map var m2=scala.collection.mutable.Map("james"->20,"luce"->22); //遍历Key 和Value for((k,v)<-m2){println("key is"+k+" value is"+v)} result: key isjames value is20 key isluce value is22 key islili value is18
单独的遍历Key 或者value for((k,_)<-x){} for((_,v)<-x){}
//只遍历所有的key value 省略 for((k,_)<-m2) println("key is "+k) //只遍历所有的value key省略 for((_,v)<-m2) println("value is"+v) result: key is james key is luce key is lili value is20 value is22 value is18
6.元组的介绍和使用
与列表一样,元组也是不可变的,但与列表不同的是元组可以包含不同类型的元素。
val t = (1, 3.14, "Fred")
以上实例在元组中定义了三个元素,对应的类型分别为[Int, Double, java.lang.String]。
元组 通过 ._ 取值, 下标从1 开始,比如 t._1 将获取1 这点和数组不同,数组的下标是从0开始的
val t = (4,3,2,1) val sum = t._1 + t._2 + t._3 + t._4 println( "元素之和为: " + sum )
result:
$ scalac Test.scala
$ scala Test
元素之和为: 10
元组的迭代
你可以使用 Tuple.productIterator() 方法来迭代输出元组的所有元素:
//通过 productIterator 迭代元组 for(x<-t.productIterator) println(x)
以上是关于map 中的键值都可以是啥类型的啊的主要内容,如果未能解决你的问题,请参考以下文章
java问题,我想在java中存储键值对,以便使用,但是键值对的键和值都有重复元素,使用hashmap会产生覆盖。