`
570421779
  • 浏览: 46742 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

从遍历Map看对引用的概念

    博客分类:
  • java
 
阅读更多
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具体返回的类型
0
1
分享到:
评论

相关推荐

    C++实现图的邻接表的广度优先遍历

    1. 定义结构体:我们可以创建一个结构体或类来表示图中的节点,通常包括节点的值和指向邻接节点的指针或引用。例如: ```cpp struct Node { int value; vector*&gt; neighbors; }; ``` 2. 初始化图:创建一个二维...

    java 实现的二叉树前序建树,中序建树,后序建树以及前序遍历,中序遍历和后序遍历的代码

    首先,我们需要定义一个二叉树节点类`TreeNode`,它包含两个属性:一个整型值`val`表示节点的值,以及两个指向子节点的引用`left`和`right`: ```java public class TreeNode { int val; TreeNode left; ...

    Java很好的学习笔记集合Map,学习代码

    1. for-each循环:使用增强for循环遍历Map的entrySet()。 2. Iterator迭代器:通过Map的entrySet().iterator()获取迭代器,然后调用next()方法获取Entry对象,再通过getKey()和getValue()获取键值。 3. KeySet遍历:...

    C++ map详解

    `map`提供了迭代器,允许遍历容器中的键值对。主要有以下几种: - `iterator`:指向`map`中元素的读写迭代器。 - `const_iterator`:指向`map`中元素的只读迭代器。 - `reverse_iterator`:反向迭代器,提供反向遍历...

    Struts iterator JSP Map 中嵌套 Map

    Struts2框架提供了一种便捷的方式,允许我们在JSP页面上遍历并显示存储在Map中的数据。这篇博客(尽管链接已不可用)可能探讨了如何使用Struts2的迭代器标签来处理嵌套Map的情况。 首先,让我们理解基本概念。`...

    PP内存遍历-x32-x64

    使用RAII(Resource Acquisition Is Initialization)原则可以避免内存泄漏,同时使用STL容器如`std::vector`或`std::map`可以简化遍历操作,提高代码的可读性和可维护性。 7. 实践应用: "PP内存遍历_x32_x64.exe...

    stl容器map的使用

    `map`的基本概念 `map`是一个排序的关联容器,内部实现通常为红黑树。每个元素都包含一个键值和一个关联的映射值。键值决定了元素在容器中的位置,而映射值则与该键值相关联。键和值可以是任何类型,只要它们之间...

    Struts中List里嵌套Map

    这里的`yourFormName`是ActionForm或Action类在请求中的名称,`product`是迭代过程中对当前Map对象的引用。 当用户提交表单时,Struts框架会自动将页面上的数据映射到ActionForm或Action类中的相应属性。对于List中...

    Go语言map(Go语言映射)

    - `map`在Go语言中属于引用类型,其声明方式如下: ```go var mapName map[keyType]valueType ``` - 其中,`mapName`是`map`变量的名称,`keyType`和`valueType`分别代表键和值的数据类型。 - 示例: ```go ...

    STL map 阅读源码有感,map简单实现

    这里我们主要探讨如何实现一个简单的`map`以及红黑树的基本概念。 首先,`map`的核心在于它的底层数据结构——红黑树。红黑树是一种自平衡二叉查找树,其特性包括: 1. 每个节点都带有颜色属性,要么是红色,要么...

    C++ map用法总结(整理)

    它们都遵循双向迭代器的概念,允许你从前向后或从后向前遍历键值对。 ```cpp for (auto it = myMap.begin(); it != myMap.end(); ++it) { std::cout &lt;&lt; "Key: " &lt;&lt; it-&gt;first , Value: " &lt;&lt; it-&gt;second ; } ``` #...

    JNI实例的使用

    例如,我们可以遍历Map,获取每个键值对,再分别转换为对应的本地类型进行处理。 处理复杂对象,比如自定义类实例,需要注册类并创建本地引用。使用`RegisterNatives`可以注册类的方法,然后通过`NewObject`创建...

    容器指针引用示例(学长自己写的)

    在C++编程中,容器、指针和引用是三个非常重要的概念。容器是STL(标准模板库)的一部分,提供了高效的数据结构,如vector、list、set和map等,用于组织和管理数据。指针是C++中的一个关键特性,它允许我们存储变量...

    泛型应用--图的深度(广度)优先遍历.成语接龙例

    本例中,我们将结合这两个概念,通过成语接龙游戏来阐述泛型在图遍历中的应用。 首先,我们需要定义一个表示成语的类,这个类可能包含成语的ID、内容以及上一个和下一个成语的引用。例如: ```java public class ...

    map

    - `forEach(callbackFn)`: 遍历Map中的每个键值对并执行回调函数。 4. **Map与Object的比较**: - 键的类型:Map支持所有类型的键,而Object仅支持字符串和Symbol作为键。 - 展开操作:在JSON序列化时,Map不能...

    第十一单元.pptx_电子版_pptx版

    1. Map的概念:Map是一种键值对的集合,与对象类似,但键可以是任何类型,不只是字符串。这为存储和检索任意类型的数据提供了便利。 2. 创建Map:可以通过new Map()创建实例,然后用set()方法添加键值对。或者直接从...

    各容器与迭代器的用法.docx

    WeakHashMap是一个特殊的Map实现,它使用弱引用作为键,当键不再被引用时,键值对会自动从Map中移除。 3. **Vector** 和 **ArrayList**: 这两者都是List接口的实现,用于存储有序的元素序列。Vector是线程安全的,...

    groovy入门实例代码详细(包括字符串,map,闭包等等)

    - Map也支持`each`循环遍历键值对。 5. **闭包**: - 闭包是Groovy中的一个强大特性,它可以看作是一个可以传递的匿名函数。 - 闭包的定义通常用`{}`包裹,参数在内,代码块在外,如`{param -&gt; println param}`...

    25.(leaflet篇)leaflet删除所有图层(不含地图).zip

    4. **删除多个图层**:如果你有多个图层对象的引用,可以遍历这些引用并逐一调用`map.removeLayer(layer)`来删除它们。 5. **删除所有图层**:为了删除地图上的所有图层,但不删除地图本身,你首先需要获取地图上的...

Global site tag (gtag.js) - Google Analytics