`
bo521dai
  • 浏览: 19447 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Map 学习

 
阅读更多
interface Map :implements 有 HashMap,TreeMap;
Map的主要方法:
put();
putAll();
get(key);
remove(key);
containsKey(key);
containsValue(value);
ketSet();
values()(Collection);
entrySet()(key=value…);
isEmpty();


HashMap:
[/color
变量:

// table 里存放 该 Map中全部数据;
[color=darkred]transient Entry[] table;

/////////////////////////////////////////////////////////////////////
Entry<K,V>定义:static class Entry<K,V> implements Map.Entry<K,V> {
        final K key;
        V value;
        Entry<K,V> next;
        final int hash;

        /**
         * Creates new entry.
         */
        Entry(int h, K k, V v, Entry<K,V> n) {
            value = v;
            next = n;
            key = k;
            hash = h;
        }
/////////////////////////////////////////////////////////////////////
     * The number of times this HashMap has been structurally modified
     * Structural modifications are those that change the number of mappings in
     * the HashMap or otherwise modify its internal structure (e.g.,
     * rehash).  This field is used to make iterators on Collection-views of
     * the HashMap fail-fast.  (See ConcurrentModificationException).
     */
    transient int modCount;
put 方法源代码:

public V put(K key, V value) {
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key.hashCode());
        int i = indexFor(hash, table.length);
        for (Entry<K,V> e = table[i]; e != null; e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }

        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }

void addEntry(int hash, K key, V value, int bucketIndex) {        Entry<K,V> e = table[bucketIndex];
        table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
        if (size++ >= threshold)
            resize(2 * table.length);
    }

---------------------------------------------------------------------
---------------------------------------------------------------------
由此可见:
HashMap特点:
1.数据存放在Entry 数组中(table)
2.按照自定义key的hash值来存储。
3.初始化一个 数组,数组的 类型是 Entry的。
4.同一hash 的不同key,存放在 table数组同一 下表处。。。组成一个小链表。
5.put时 如果存在同一key值,则只修改对应的value值。
6.只能存在一个null key。


LinkedHashMap


类定义:
---------------------------------------------------------------------
public class LinkedHashMap<K,V>
    extends HashMap<K,V>
    implements Map<K,V>
{ private transient Entry<K,V> header;.....
}
---------------------------------------------------------------------
private static class Entry<K,V> extends HashMap.Entry<K,V> {
        // These fields comprise the doubly linked list used for iteration.
        Entry<K,V> before, after;
---------------------------------------------------------------------
由此可见LinkedHashMap所有的成员变量如下:

transient Entry[] table;
private transient Entry<K,V> header;

Entry<K,V> 变量如下:
        final K key;
        V value;
        Entry<K,V> next;
        final int hash;
        Entry<K,V> before, after;
所以:LinkedHashMap用 双向链表即实现了Map又实现了链表。。解决了HashMap无序的问题。 但是,其 空间利用率 及效率大大降低。。。

---------------------------------------------------------------------

TreeMap

主要变量:
  private final Comparator<? super K> comparator;
  private transient Entry<K,V> root = null;

static final class Entry<K,V> implements Map.Entry<K,V> {
        K key;
        V value;
        Entry<K,V> left = null;
        Entry<K,V> right = null;
        Entry<K,V> parent;
        boolean color = BLACK;
排序是按照 Comparator来判断,如果该变量为null,自然排序。否则,按照Comparator来排序...
This implementation provides guaranteed log(n) time cost for the containsKey, get, put and remove operations.

分享到:
评论

相关推荐

    Google MAP 学习例程

    **Google MAP 学习例程** Google Map API 是一套强大的工具,它允许开发者在自己的网站或应用程序中嵌入交互式的地图功能。这个“Google MAP 学习例程”旨在帮助你深入理解和掌握Google Map V3 API,从而能够利用它...

    Android开发Google_map学习资料

    Android开发Google_map学习资料 里面有API_GoogleMap中文手册.chm Android定位API使用手册.doc Google_地图_API_专业版开发人员指南.doc Google地图API教程.pdf 还另外发布了 Android SQLite--小巧好用的SQLite GUI...

    Android开发Google_map学习资料.zip

    Android开发Google_map学习资料 里面有API_GoogleMap中文手册.chm Android定位API使用手册.doc Google_地图_API_专业版开发人员指南.doc Google地图API教程.pdf 还另外发布了 Android SQLite--小巧好用的SQLite GUI...

    P231~236C++map学习笔记.docx

    map 的迭代器和查找操作#pragma once#include&lt;iostream&gt;#include&lt;map&gt;using namespace std; // 3.9.5 map的迭代器和查找操作 * 迭代器: * `begin()` 返回指向map首元素的迭代器,`end()` 返回指向超出容器范围的...

    google map api 学习笔记

    **谷歌地图API学习笔记** 谷歌地图API(Google Maps API)是一种强大的工具,允许...通过阅读《google map学习文档.doc》,可以深入学习这些概念并实践应用,逐步掌握谷歌地图API的使用,构建功能丰富的地图应用。

    geomap_4.0_自动授权学习版

    《geomap_4.0_自动授权学习版》是一款专为学生课程实习设计的地理信息系统软件,它提供了丰富的地理信息处理功能,便于学生在学习过程中掌握GIS(Geographic Information System)的基本操作和应用。该版本强调了...

    google map api学习

    通过学习谷歌地图API,你可以创建定制的地图,添加标记、路径、信息窗口,甚至进行复杂的地理编码和路线规划。下面将详细介绍谷歌地图API的一些关键知识点。 首先,你需要在Google Developers Console中注册一个...

    MapObject中文学习教程

    这个“MapObject中文学习教程”包含了对MapObject技术的深入介绍,旨在帮助用户掌握这一强大的地图处理工具。教程可能包括了基础概念、接口、方法、属性以及如何在实际项目中应用MapObject的各种技巧。 1. **Map...

    Python-使用OpenStreetMap特性和卫星图像进行深入学习网络训练

    在深度学习领域,结合OpenStreetMap(OSM)数据与卫星图像可以创建强大的模型,用于理解和预测城市结构、交通模式等复杂地理信息。OpenStreetMap是一个开放源代码的项目,提供全球地图数据,包括道路、建筑、交通...

    Map (c++实现的简易map)

    自定义`Map`的主要目的是为了学习和理解数据结构的工作原理,以及如何在C++中实现这些数据结构。尽管`std::map`已经提供了一套完整的功能,但自己动手实现可以帮助开发者深入理解底层的红黑树(Red-Black Tree)或...

    MapObject中文学习指南

    这篇中文学习指南将帮助你深入理解MapObject的核心概念和技术,特别是针对VB(Visual Basic)的编程环境。 1. **MapObject基础**: - MapObject是GIS开发的工具,它提供了一系列接口和类,用于创建地图应用。 - ...

    GeoMap4.0安装包

    GeoMap4.0是一款强大的地理信息系统软件,专为地图数据处理、分析和展示设计。它提供了丰富的地图制作、空间数据分析和地图服务发布功能,广泛应用于城市规划、环境保护、交通运输、灾害应急等多个领域。GeoMap4.0...

    map_电机_效率map_

    电机效率Map是电机性能分析中的一个重要概念,它用于描述电机在不同工况下运行的效率分布情况。...通过学习和使用这样的工具,工程师能够更好地理解和优化电机的效率,从而推动技术进步和能源利用效率的提升。

    素材_tilemap素材_使用TileMap快速构造2D关卡_

    - 开源项目:参考开源游戏项目,学习他们如何运用TileMap构建有趣的关卡。 总的来说,掌握TileMap的使用是2D游戏开发中的基础技能,通过熟练运用,可以快速搭建出各种风格的2D关卡,丰富游戏内容,提升玩家体验。...

    好用的geomap教程

    总之,《好用的geomap教程》是一份全面而实用的学习资源,无论你是GIS新手还是有一定经验的使用者,都能从中受益,提升你的geomap操作技能,更好地利用地理信息进行决策和分析。通过深入学习和实践,你将能够熟练地...

    MAPServer_open_gis开发学习

    《MapServer:开放GIS开发学习》 MapServer是一款开源地理信息系统(GIS)软件,它能够将地理数据库中的数据转换为地图图像,供Web应用程序使用。MapServer的核心功能是处理地理空间数据,支持多种数据格式,并提供...

    电机map图绘制

    电机Map图绘制是电机设计与分析中的一个重要环节,它能够直观地展示电机在不同工作条件下的性能特性。...通过理解并使用提供的MATLAB程序和数据,可以深入学习电机性能分析,并进一步改进和扩展Map图的绘制方法。

    用C# MapObject编写的一个GIS程序

    在本文中,我们将深入探讨如何使用C#编程语言与Esri的MapObject库结合,来构建一个GIS(地理信息系统)程序。MapObject是Esri公司提供的一个强大的地图开发组件,它允许开发者创建交互式地图应用,支持多种地理数据...

    map_map_增删查改_STL_C++_

    在C++编程中,STL(Standard Template Library,标准模板库)是不可或缺的一...学习并熟练掌握`map`的使用,能够显著提升C++编程的效率和代码质量。在实际编程中,我们应根据需求选择合适的容器,充分利用STL的优势。

    嵌套Map或者List获取key、value值

    在编程中,尤其是在Java或类似的面向对象语言中,我们经常遇到需要处理复杂数据结构的情况,如嵌套的Map和List。...文件"map、List嵌套的循环检索方法.txt"可能提供了更具体的示例和代码,可以作为进一步学习的参考。

Global site tag (gtag.js) - Google Analytics