1.在变成过程中我们通常会用到遍历Map,具体代码如下所示:
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "a");
map.put(2, "b");
Iterator<Entry<Integer, String>> iter = map.entrySet().iterator();
int key;
String value = null;
while(iter.hasNext()){
key = iter.next().getKey();
value = iter.next().getValue();
// do something
}
我们知道Map和Iterator都是接口,接口是不能实例化的。但是这里的Map<Integer,String> map = new HashMap<Integer, String>();是什么意思?难道不是实例化了一个Map对象?如果对此有疑问,说明是对引用的概念不明了。这里在堆中创建的是HashMap的一个对象,而map只是存在于栈空间中,引用了堆中的HashMap对象。
2.为什么不使用HashMap<Integer, String> map = new HashMap<Integer, String>()
在程序实现中,我们希望隐藏具体的实现过程。代码如下:
public class Test{
public static void main(String[] args){
Map<Integer, String> map = getMap();
}
public static Map<Integer, String> getMap(){
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "a");
map.put(2, "b");
Iterator<Entry<Integer, String>> iter = map.entrySet().iterator();
int key;
String value = null;
Entry<Integer, Strng> entry = null;
while(iter.hasNext()){
entry = iter.next();
key = entry.getKey();
value = entry.getValue();
// do something
}
return map;
}
// public static Map<Integer, String> getMap(){
// Map<Integer, String> map = new LinkedHashMap<Integer, String>();
// map.put(1, "a");
// map.put(2, "b");
// Iterator<Entry<Integer, String>> iter = map.entrySet().iterator();
// while(iter.hasNext()){
// // do something
// }
// return map;
// }
}
这样不管是getMap方法返回的是HashMap还是LinkedHashMap,在main函数中都只需要定义Map<Integer, String> map = getMap();即可,而不需要知道getMap具体返回的类型
分享到:
相关推荐
1. 定义结构体:我们可以创建一个结构体或类来表示图中的节点,通常包括节点的值和指向邻接节点的指针或引用。例如: ```cpp struct Node { int value; vector*> neighbors; }; ``` 2. 初始化图:创建一个二维...
首先,我们需要定义一个二叉树节点类`TreeNode`,它包含两个属性:一个整型值`val`表示节点的值,以及两个指向子节点的引用`left`和`right`: ```java public class TreeNode { int val; TreeNode left; ...
1. for-each循环:使用增强for循环遍历Map的entrySet()。 2. Iterator迭代器:通过Map的entrySet().iterator()获取迭代器,然后调用next()方法获取Entry对象,再通过getKey()和getValue()获取键值。 3. KeySet遍历:...
`map`提供了迭代器,允许遍历容器中的键值对。主要有以下几种: - `iterator`:指向`map`中元素的读写迭代器。 - `const_iterator`:指向`map`中元素的只读迭代器。 - `reverse_iterator`:反向迭代器,提供反向遍历...
Struts2框架提供了一种便捷的方式,允许我们在JSP页面上遍历并显示存储在Map中的数据。这篇博客(尽管链接已不可用)可能探讨了如何使用Struts2的迭代器标签来处理嵌套Map的情况。 首先,让我们理解基本概念。`...
使用RAII(Resource Acquisition Is Initialization)原则可以避免内存泄漏,同时使用STL容器如`std::vector`或`std::map`可以简化遍历操作,提高代码的可读性和可维护性。 7. 实践应用: "PP内存遍历_x32_x64.exe...
`map`的基本概念 `map`是一个排序的关联容器,内部实现通常为红黑树。每个元素都包含一个键值和一个关联的映射值。键值决定了元素在容器中的位置,而映射值则与该键值相关联。键和值可以是任何类型,只要它们之间...
这里的`yourFormName`是ActionForm或Action类在请求中的名称,`product`是迭代过程中对当前Map对象的引用。 当用户提交表单时,Struts框架会自动将页面上的数据映射到ActionForm或Action类中的相应属性。对于List中...
- `map`在Go语言中属于引用类型,其声明方式如下: ```go var mapName map[keyType]valueType ``` - 其中,`mapName`是`map`变量的名称,`keyType`和`valueType`分别代表键和值的数据类型。 - 示例: ```go ...
这里我们主要探讨如何实现一个简单的`map`以及红黑树的基本概念。 首先,`map`的核心在于它的底层数据结构——红黑树。红黑树是一种自平衡二叉查找树,其特性包括: 1. 每个节点都带有颜色属性,要么是红色,要么...
它们都遵循双向迭代器的概念,允许你从前向后或从后向前遍历键值对。 ```cpp for (auto it = myMap.begin(); it != myMap.end(); ++it) { std::cout << "Key: " << it->first , Value: " << it->second ; } ``` #...
例如,我们可以遍历Map,获取每个键值对,再分别转换为对应的本地类型进行处理。 处理复杂对象,比如自定义类实例,需要注册类并创建本地引用。使用`RegisterNatives`可以注册类的方法,然后通过`NewObject`创建...
在C++编程中,容器、指针和引用是三个非常重要的概念。容器是STL(标准模板库)的一部分,提供了高效的数据结构,如vector、list、set和map等,用于组织和管理数据。指针是C++中的一个关键特性,它允许我们存储变量...
本例中,我们将结合这两个概念,通过成语接龙游戏来阐述泛型在图遍历中的应用。 首先,我们需要定义一个表示成语的类,这个类可能包含成语的ID、内容以及上一个和下一个成语的引用。例如: ```java public class ...
- `forEach(callbackFn)`: 遍历Map中的每个键值对并执行回调函数。 4. **Map与Object的比较**: - 键的类型:Map支持所有类型的键,而Object仅支持字符串和Symbol作为键。 - 展开操作:在JSON序列化时,Map不能...
1. Map的概念:Map是一种键值对的集合,与对象类似,但键可以是任何类型,不只是字符串。这为存储和检索任意类型的数据提供了便利。 2. 创建Map:可以通过new Map()创建实例,然后用set()方法添加键值对。或者直接从...
WeakHashMap是一个特殊的Map实现,它使用弱引用作为键,当键不再被引用时,键值对会自动从Map中移除。 3. **Vector** 和 **ArrayList**: 这两者都是List接口的实现,用于存储有序的元素序列。Vector是线程安全的,...
- Map也支持`each`循环遍历键值对。 5. **闭包**: - 闭包是Groovy中的一个强大特性,它可以看作是一个可以传递的匿名函数。 - 闭包的定义通常用`{}`包裹,参数在内,代码块在外,如`{param -> println param}`...
4. **删除多个图层**:如果你有多个图层对象的引用,可以遍历这些引用并逐一调用`map.removeLayer(layer)`来删除它们。 5. **删除所有图层**:为了删除地图上的所有图层,但不删除地图本身,你首先需要获取地图上的...