Map初探

OpenGL 立方体贴图初探 接着,我们设置了纹理的过滤参数以及坐标的包裹方式。值得注意的是,这里我们使用的纹理坐标是一个三维向量,而不是常规的二维坐标。这样,在渲染时,我们只需要给定一个向量,OpenGL就可以自动计算在该方向上的立方体贴图纹理坐标,并在屏幕上进行相应的渲染。在OpenGL中,我们可以使用glTexImage2D函数创建立方体贴图,并使用glTexCoord3f函数指定每个顶点的纹理坐标。在OpenGL中,立方体贴图(Cubemaps)是一项非常重要的技术,用于创建逼真的镜面反射和环境映射等特效。 阅读详情

Map

1.Map用法

1.1类型介绍

Java 自带了各种 Map 类。这些 Map 类可归为三种类型:

  1. 通用Map,用于在应用程序中管理映射,通常在 java.util 程序包中实现

HashMap、Hashtable、Properties、LinkedHashMap、IdentityHashMap、TreeMap、WeakHashMap、ConcurrentHashMap

  1. 专用Map,通常我们不必亲自创建此类Map,而是通过某些其他类对其进行访问

java.util.jar.Attributes、javax.print.attribute.standard.PrinterStateReasons、java.security.Provider、java.awt.RenderingHints、javax.swing.UIDefaults

  1. 一个用于帮助我们实现自己的Map类的抽象类
  2. AbstractMap

1.2类型区别

HashMap

最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null。非同步的。

TreeMap

能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
Hashtable

与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。
LinkedHashMap

保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。

2.概要

这里写图片描述
如上图:
(01) Map 是映射接口,Map中存储的内容是键值对(key-value)。
(02) AbstractMap 是继承于Map的抽象类,它实现了Map中的大部分API。其它Map的实现类可以通过继承AbstractMap来减少重复编码。
(03) SortedMap 是继承于Map的接口。SortedMap中的内容是排序的键值对,排序的方法是通过比较器(Comparator)。
(04) NavigableMap 是继承于SortedMap的接口。相比于SortedMap,NavigableMap有一系列的导航方法;如”获取大于/等于某对象的键值对”、“获取小于/等于某对象的键值对”等等。
(05) TreeMap 继承于AbstractMap,且实现了NavigableMap接口;因此,TreeMap中的内容是“有序的键值对”!
(06) HashMap 继承于AbstractMap,但没实现NavigableMap接口;因此,HashMap的内容是“键值对,但不保证次序”!
(07) Hashtable 虽然不是继承于AbstractMap,但它继承于Dictionary(Dictionary也是键值对的接口),而且也实现Map接口;因此,Hashtable的内容也是“键值对,也不保证次序”。但和HashMap相比,Hashtable是线程安全的,而且它支持通过Enumeration去遍历。
(08) WeakHashMap 继承于AbstractMap。它和HashMap的键类型不同,WeakHashMap的键是“弱键”。

3.定义

Map的定义如下:

public interface Map<K,V> { }

Map 是一个键值对(key-value)映射接口。Map映射中不能包含重复的键;每个键最多只能映射到一个值。
Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
Map 映射顺序。有些实现类,可以明确保证其顺序,如 TreeMap;另一些映射实现则不保证顺序,如 HashMap 类。
Map 的实现类应该提供2个“标准的”构造方法:第一个,void(无参数)构造方法,用于创建空映射;第二个,带有单个 Map 类型参数的构造方法,用于创建一个与其参数具有相同键-值映射关系的新映射。实际上,后一个构造方法允许用户复制任意映射,生成所需类的一个等价映射。尽管无法强制执行此建议(因为接口不能包含构造方法),但是 JDK 中所有通用的映射实现都遵从它。

3.1Map的Api:

abstract void                 clear()
abstract boolean              containsKey(Object key)
abstract boolean              containsValue(Object value)
abstract Set<Entry<K, V>>     entrySet()
abstract boolean              equals(Object object)
abstract V                    get(Object key)
abstract int                  hashCode()
abstract boolean              isEmpty()
abstract Set<K>               keySet()
abstract V                    put(K key, V value)
abstract void                 putAll(Map<? extends K, ? extends V> map)
abstract V                    remove(Object key)
abstract int                  size()
abstract Collection<V>        values()

说明:
(01) Map提供接口分别用于返回 键集、值集或键-值映射关系集。
entrySet()用于返回键-值集的Set集合
keySet()用于返回键集的Set集合
values()用户返回值集的Collection集合
因为Map中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection。

(02) Map提供了“键-值对”、“根据键获取值”、“删除键”、“获取容量大小”等方法。

3.2 Map.Entry

Map.Entry的定义如下:

interface Entry<K,V> { }

Map.Entry是Map中内部的一个接口,Map.Entry是键值对,Map通过 entrySet() 获取Map.Entry的键值对集合,从而通过该集合实现对键值对的操作。

Map.Entry的API:

abstract boolean     equals(Object object)
abstract K             getKey()
abstract V             getValue()
abstract int         hashCode()
abstract V             setValue(V object)

3.3 AbstractMap

AbstractMap的定义如下:

public abstract class AbstractMap<K,V> implements Map<K,V> {}

AbstractMap类提供 Map 接口的骨干实现,以最大限度地减少实现此接口所需的工作。
要实现不可修改的映射,编程人员只需扩展此类并提供 entrySet 方法的实现即可,该方法将返回映射的映射关系 set 视图。通常,返回的 set 将依次在 AbstractSet 上实现。此 set 不支持 add() 或 remove() 方法,其迭代器也不支持 remove() 方法。

要实现可修改的映射,编程人员必须另外重写此类的 put 方法(否则将抛出 UnsupportedOperationException),entrySet().iterator() 返回的迭代器也必须另外实现其 remove 方法。

AbstractMap的API

abstract Set<Entry<K, V>>     entrySet()
         void                 clear()
         boolean              containsKey(Object key)
         boolean              containsValue(Object value)
         boolean              equals(Object object)
         V                    get(Object key)
         int                  hashCode()
         boolean              isEmpty()
         Set<K>               keySet()
         V                    put(K key, V value)
         void                 putAll(Map<? extends K, ? extends V> map)
         V                    remove(Object key)
         int                  size()
         String               toString()
         Collection<V>        values()
         Object               clone()

3.4 SortedMap

SortedMap的定义如下:

public interface SortedMap<K,V> extends Map<K,V> { }

SortedMap是一个继承于Map接口的接口。它是一个有序的SortedMap键值映射。
SortedMap的排序方式有两种:自然排序 或者 用户指定比较器。 插入有序 SortedMap 的所有元素都必须实现 Comparable 接口(或者被指定的比较器所接受)。

另外,所有SortedMap 实现类都应该提供 4 个“标准”构造方法:
(01) void(无参数)构造方法,它创建一个空的有序映射,按照键的自然顺序进行排序。
(02) 带有一个 Comparator 类型参数的构造方法,它创建一个空的有序映射,根据指定的比较器进行排序。
(03) 带有一个 Map 类型参数的构造方法,它创建一个新的有序映射,其键-值映射关系与参数相同,按照键的自然顺序进行排序。
(04) 带有一个 SortedMap 类型参数的构造方法,它创建一个新的有序映射,其键-值映射关系和排序方法与输入的有序映射相同。无法保证强制实施此建议,因为接口不能包含构造方法。

SortedMap的API


// 继承于Map的API
abstract void                 clear()
abstract boolean              containsKey(Object key)
abstract boolean              containsValue(Object value)
abstract Set<Entry<K, V>>     entrySet()
abstract boolean              equals(Object object)
abstract V                    get(Object key)
abstract int                  hashCode()
abstract boolean              isEmpty()
abstract Set<K>               keySet()
abstract V                    put(K key, V value)
abstract void                 putAll(Map<? extends K, ? extends V> map)
abstract V                    remove(Object key)
abstract int                  size()
abstract Collection<V>        values()
// SortedMap新增的API 
abstract Comparator<? super K>     comparator()
abstract K                         firstKey()
abstract SortedMap<K, V>           headMap(K endKey)
abstract K                         lastKey()
abstract SortedMap<K, V>           subMap(K startKey, K endKey)
abstract SortedMap<K, V>           tailMap(K startKey)

3.5 NavigableMap

NavigableMap的定义如下:

public interface NavigableMap<K,V> extends SortedMap<K,V> { }

NavigableMap是继承于SortedMap的接口。它是一个可导航的键-值对集合,具有了为给定搜索目标报告最接近匹配项的导航方法。
NavigableMap分别提供了获取“键”、“键-值对”、“键集”、“键-值对集”的相关方法。

NavigableMap的API

abstract Entry<K, V>             ceilingEntry(K key)
abstract Entry<K, V>             firstEntry()
abstract Entry<K, V>             floorEntry(K key)
abstract Entry<K, V>             higherEntry(K key)
abstract Entry<K, V>             lastEntry()
abstract Entry<K, V>             lowerEntry(K key)
abstract Entry<K, V>             pollFirstEntry()
abstract Entry<K, V>             pollLastEntry()
abstract K                       ceilingKey(K key)
abstract K                       floorKey(K key)
abstract K                       higherKey(K key)
abstract K                       lowerKey(K key)
abstract NavigableSet<K>         descendingKeySet()
abstract NavigableSet<K>         navigableKeySet()
abstract NavigableMap<K, V>      descendingMap()
abstract NavigableMap<K, V>      headMap(K toKey, boolean inclusive)
abstract SortedMap<K, V>         headMap(K toKey)
abstract SortedMap<K, V>         subMap(K fromKey, K toKey)
abstract NavigableMap<K, V>      subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
abstract SortedMap<K, V>         tailMap(K fromKey)
abstract NavigableMap<K, V>      tailMap(K fromKey, boolean inclusive)

说明:

NavigableMap除了继承SortedMap的特性外,它的提供的功能可以分为4类:
第1类,提供操作键-值对的方法。
lowerEntry、floorEntry、ceilingEntry 和 higherEntry 方法,它们分别返回与小于、小于等于、大于等于、大于给定键的键关联的 Map.Entry 对象。
firstEntry、pollFirstEntry、lastEntry 和 pollLastEntry 方法,它们返回和/或移除最小和最大的映射关系(如果存在),否则返回 null。
第2类,提供操作键的方法。这个和第1类比较类似
lowerKey、floorKey、ceilingKey 和 higherKey 方法,它们分别返回与小于、小于等于、大于等于、大于给定键的键。
第3类,获取键集。
navigableKeySet、descendingKeySet分别获取正序/反序的键集。
第4类,获取键-值对的子集。

3.6 Dictionary

Dictionary的定义如下:

public abstract class Dictionary<K,V> {}

NavigableMap是JDK 1.0定义的键值对的接口,它也包括了操作键值对的基本函数。

Dictionary的API

abstract Enumeration<V>     elements()
abstract V                  get(Object key)
abstract boolean            isEmpty()
abstract Enumeration<K>     keys()
abstract V                  put(K key, V value)
abstract V                  remove(Object key)
abstract int                size()
Etcd教程 — 第三章 Etcd集群动态发现、DNS发现 阅读详情

相关推荐

基于Python适用于YOLO目标检测算法的图片数据增强处理

为了增强模型的鲁棒性以及数据的丰富性,同 时为了防止由于数据过少发生过拟合,本设计对数 据集进行数据增强处理,包括随机亮度调节、随机 对比度调节、随机饱和度调节、加入高斯噪声、水 平翻转、运动模糊和旋转 15°

weixin_67136409的博客 701

Map集合系列

文章目录一、Map结构1、架构2、接口3、抽象类4、子类二、HashMap三、HashTable四、TreeMap五、WeakHashMap六、Map总结 一、Map结构 1、架构 2、接口 1、Map接口是所有实现类和其他接口的父接口(键值对的存储方式),提供了最基本的接口方法:容量、判断是否为空、增加(单个或者集合)、删除、获取键集合、获取值集合、entrySet迭代键值对、jdk1.8中添...

洛豳枭薰 1135

Unity TailMap

较为详细的介绍unity tailmap的功能和优缺点

WEIWEI6661012的博客 496

达梦的自定义类型和存储过程支持创建同义词,不支持同义词使用?

达梦8的自定义类型和存储过程支持创建同义词,但是通过同义词调用报错,而在oracle上验证没有问题,难道是发现了达梦的bug了?非也非也,详情请见下文

wy071218的专栏 979

TreeMap 的 tailMap()、headMap()、firstKey() 方法使用

import java.util.SortedMap; import java.util.TreeMap; /** * Author: heatdeath * Date: 2018/5/13 * Desc: */ public class TreeMapDemo { public static void main(String[] args) { // c...

HeatDeath的博客 1万+

手把手教你用Copilot插件在Obsidian里免费接入DeepSeek-R1(附硅基流动API密钥获取)

本文详细介绍了如何通过Copilot插件在Obsidian中免费接入DeepSeek-R1模型,实现智能知识管理。从硅基流动API密钥获取到插件配置,再到高级功能调优和实战应用技巧,手把手教你打造AI驱动的个人知识库。

weixin_33686714的博客 2801

Java SortedMap接口三个集合输出:headMap()、tailMap()、subMap()

Java SortedMap接口三个集合输出:headMap()、tailMap()、subMap()

m0_64868292的博客 1523

【Claude】Not logged in 错误:未登录状态的判断与 /login 认证路径 bug报错已解决

login 是首选修复:大多数 "Not logged in" 只需重新执行 /login检查系统时间:时间偏差是 Token 验证失败的常见原因避免密钥库被清理:将 Claude Code 添加到系统清理工具的白名单企业环境用 API Key:如果组织禁用 OAuth,使用 API Key 认证区分凭证类型:理解 Not logged in(无凭证)vs Invalid key(有但无效)

博客 7317

codex出现Reconnecting和stream disconnected before completion:stream closed before response.complete解决方案

本文主要介绍了在使用codex过程中出现Reconnecting和stream disconnected before completion: stream closed before response.completed的解决方案,希望能对使用codex的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 9万+

SortedMap、NavigableMap

SortedMap、NavigableMap 的方法

赵丙双的博客 743

华为OD机考双机位C卷 - 简单的解压缩算法 (Java & Python & JS & GO & C++ & C)

华为OD机考双机位C卷 - 简单的解压缩算法 , 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 130

初探Map

Map接口 Map记录的是key和Value间的映射关系。例如男朋友和女朋友这种就能建立起映射关系,如小明(key)的女朋友(映射关系)是小红(Value) 需要注意的一点是Map中的key是不能重复的,而Value是可以重复的。但是一个key只能和一个Value建立映射关系。也就是说,在JDK的世界里,小明的女朋友是小红,老王的女朋友也可以是小红,但是小明的女朋友不能既是小红,又是小兰。 常用方法 V put(K key, V value); // 向Map中添加一组映射关系,并返回这个key之前映射的v

qq_28015441的博客 189

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【C++】初探 map 与 set

本文初步讲解了map与set的使用

叫我龙翔的博客 1020

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

UWA学堂专栏推荐:光照贴图Lightmap初探

这也许是目前国内对lightmap(光照贴图)总结最全面的文章了,作者钱康来,毕业于清华大学CG/CAD实验室,主要研究方向为计算机图形学,多年工作经验横跨Unity、Cocos、unreal多个游戏引擎,为您揭开lightmap的奥秘。 详情请扫描图中的二维码,或点击UWA学堂。 ...

UWA—简单优化,优化简单! 1571

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JS之map用法初探

一个项目的时候出现了一个获取品牌列表,并按照首字符的拼音或者英文的首字母A-Z排序的需求,如图所示:   由于html页面里面还用到了art-template的模板循环,最开始写出来的时候列表是循环了出来,但是并没有按照A-Z的分组,而是很多A,A,A,很多B,B,B,很多C,C,C,等等,问题困扰了很久,后来经人帮助用map的键值对方法得到了解决。 html代码如下:

this_ITBoy的博客 7102

[C++]map初探

先说结论:用map统计字符串字符时,可以直接++map[c],而不必事先判断pair<c,*>是否存在于map中。 map<char, int> m; cout << m.count('f') << endl; //0,表示以f为key的pair数量为0 cout << (m.find('f')!=m.end()) << ...

Zolewit的博客 280

STL hash_map 底层初探

hash_map 底层是采用hashtable实现的,在讲解hash_map之前,先看一下hash_table的原理。 (1)hashtable数据结构 hash table表格内的元素称为桶(bucket),而由桶所链接的元素称为节点(node),其中存入桶元素的容器为stl本身很重要的一种序列式容器——vector容器。之所以选择vector为存放桶元素的基础容器,主要是因为vector容

菜根 5814

nginx map初探

map指令由ngx_http_map_module模块提供,并且默认加载。 map指令用来创建变量,仅在变量被接受的时候执行视图映射操作。 map指令配置段位于http段内。 map指令有三个参数: default:默认值,当没有设置 default,将会用一个空的字符串作为默认的结果。 hostnames:允许用前缀或者后缀掩码指定域名作为源变量值。(这个参数必须写在值映射列表的最前面) in...

weixin_34128501的博客 184

map_初探

map是一个很有用的映射工具,底层用红黑树实现,所以也是自动有序的(按照键值key排序) #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;map&gt; using namespace std; int main() { //map译为映射,常用的STL容器之一 //int数组是定义了一个int到int类型的映射,do...

热心市民小黎的博客 208

golang数据结构初探之字典map

Map Go语言的map底层使用Hash表实现的 特性预览 操作方式 初始化 map分别支持字面量初始化和内置函数make()初始化 字面量初始化 func MapInit() { m := map[string]int{ "apple": 1, "banana": 2, } for k, v := range m { fmt.Printf(" %s : %d \n", k, v) } } 内置函数make() func MapInit() { m := make(map[st

Steven的专栏 5780

STL初探——Map

std::map map 中的每个元素是一个pair模板的键值对 typedef pair value_type; Key的类型约束:具有比较函数, T 的类型约束:有合适的分配器,

193

iOS - Scenekit3D引擎初探之 - 给材质贴图

今天简单说一下 SceneKit 给材质贴图。 1,最简单的一种方法,直接打开dae 或者 scn 文件直接设置 如上图,这个dae 文件中只有一个几何体,几何体中只有一个材质球,然后设置材质球的diffuse 属性就可以了。 2,代码设置,还是针对这个最简单的dae 文件 ceilNode.geometry.firstMaterial.diffuse.contents = [UICo...

weixin_30588907的博客 320

初探STL(vector,set,map)

这几天在学习STL,可能有些地方讲的不对,还请各位大佬指出错误,谢谢。 关于STL STL是指C++的标准模板库(Standard Template Library) 提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。 C++ 标准模板库的核心包括以下三个组件: 容器(Containers) 容器是用来管理某一类对象的集合。C++ 提供了各种...

Geek_的博客 1121

Google map & GPS 初探

1:第一步就是去http://code.google.com/intl/ja-JP/android/maps-api-signup.html 申请一个KEY,当然 前面要申请密钥啥的。 2:建立一个基于GOOGLE API的工程,选择MapActivity 作为自己Activity的基类3:可以象往常一样,在layout里面进行界面设计,只是map 基础类有些特别:        

chenji001的专栏 1038
上一篇: 深入理解JVM(一)--基本原理
下一篇: Nginx学习(一)-----Nginx安装
GraceJava
博客等级 码龄10年 131粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值