JAVA链表Map的用法

HashMap和链表的查找效率比较 工程(VS2013)主要构造了HashMap和list集合,通过查找集合中的元素对两者的效率进行比较 立即下载

转载至:http://blog.sina.com.cn/s/blog_5e8a23f90101fm4v.html

JAVA的容器设计中有一个链表Map类,它是由一对对象(key, value) 组成的一个链。(key, value)键值对。由键名很容易找到它对应的值,WONDOWS的注册表就是由键值对构成的链。链表的优越性在于它随时可以添加和删除一项,它的缺点是没有索引,不方便顺序获取数据。

Map是个抽象类,不能用构键器来构造一个Map类实例,我们必须用

Map m = new HashMap();

来建立一个Map。实际上我们使用的是HashMap的方法(对Map的抽象方法的具体实现)。常用的方法:

 

public Object get(Object)      由键得到值,即返回value

public Object put(Object,Object)   添加一个键值对

public void clear()                清除所以的项,成空链表了

public boolean isEmpty()      是空链表吗?

public Set entrySet()             返回一个集合,它包含所有的键值对

public void putAll(Map)              把一个Map加入到这个链表中。

public int size()                    链表的长度

public Collection values()      返回包含所有值的集合

public Object remove(Object)              移除指定的键

public Set keySet()               返回包含所有键的集合

public boolean containsKey(Object)     是否包含指定的键

public boolean containsValue(Object)   是否包含指定的值

public int hashCode()                         

public boolean equals(Object)

public String toString()

 

下面的例1 演示了如何用给Map添加元素,用get方法查询,以及移掉一项。

 

例1 测试Map的性能和用法

// MapTest.java

import java.util.*;

 

public class MapTest {

public static void main(String[] args){

// Map m = new Map();

  Map m = new HashMap();

  m.clear();

  m.put("America","美国");

  m.put("China","中国");

  m.put("Japen","日本");

  m.put("Russia","俄罗斯");

  m.put("Korea","韩国");

  System.out.println(m.entrySet());

  System.out.println(m.keySet());

  System.out.println(m.values());

  System.out.println(m.get(" China"));

  System.out.println(m.get("中国"));

//  说明get 只能够由key得到value

  String q = m.containsValue("美国")?"Map值中包含美国":"不!不包含!";

  System.out.println(q);

  Map m6 = new HashMap();

  m6.putAll(m);

  m6.put("NorthKorea", "朝鲜");

  int n = m6.size();

  System.out.println( n +"方会谈:" +m6.values()); 

  m6.remove("中国"); n = m6.size();

  // m6.remove("中国"); 没东西被移除

  System.out.println( n +"方会谈:" +m6.values()); 

}

}

本程序的输出如下:

[America=美国, Russia=俄罗斯, Korea=韩国, Japen=日本, China=中国]

[America, Russia, Korea, Japen, China]

[美国, 俄罗斯, 韩国, 日本, 中国]

中国

null

Map值中包含美国

6方会谈:[美国, 朝鲜, 俄罗斯, 韩国, 日本, 中国]

6方会谈:[美国, 朝鲜, 俄罗斯, 韩国, 日本, 中国]

第一行由语句System.out.println(m.entrySet())输出,它是全链表。第二第三行分别是键和值的集合(Set 和Colloction)。第五行的null是因为m.get("中国")返回的空, 这说明不能从value 倒过来查key。最后一行和它的前一行相同是因为m6.remove("中国")不起作用。如果改为m6.remove("China")就起作用了。

 

 

例2 演示如何用数组来生成Map

// MapTest1.java

import java.util.*;

import com.shps.util.CountryChs;

 

public class MapTest1 {

public static void main(String[] args) {

 String[][] pairs = CountryChs.pairs ;

 Map m = new HashMap();

 int n = pairs.length;

 for(int i=0; i

   m.put(pairs[i][0],pairs[i][1]);

 System.out.println(m.containsKey("China"));

 System.out.println(m.get("俄罗斯"));

}

}

对于这个Map,你可以用来测试Map的各种方法(自己修改代码,如北京是哪国的首都?)。

本例中使用了一个二维的字符串数组pairs,它定义在类CountryChs中,并编译好放在包com.shps.util 中。它是一个纯中文的(国家,首都)对。包含了几乎世界上所有的国家。因为很长,不方便全部登出,下面截取一段例示。

 

// CountryChs.java

package com.shps.util;

public class CountryChs {

public static final String[][] pairs = {

//非洲

{"阿尔及利亚","阿尔及尔" },{ "安哥拉","罗安达" },

{"贝宁","波多诺伏" },{ "博茨瓦纳","卡玻隆" },

{"布基纳法索","瓦加杜古" },

 

//亚洲

{"阿富汗","喀布尔" },{ "巴林","麦纳麦" },

{"孟加拉国","达卡" },{ "不丹","廷布" },

{"文莱","斯里巴加湾市" },

{"柬埔寨","金边"}, {"中国","北京"},

/欧洲

{"阿尔巴尼亚","地拉那" },{ "安道尔","安道尔城" },

{"奥地利","维也纳"},{"比利时","布鲁塞尔"},

{"丹麦","哥本哈根"},{"爱沙尼亚","塔林" },

{"德国","柏林"},{"希腊","雅典"},

{"匈牙利","布达佩斯"},{"冰岛","雷克雅未克" },

};

}

你如果编译这个文件,可以得到一个不完整的国家—首都字符串数组。

 

下面我们利用这个链表编写一个由首都名查国家的程序。因为没有象get(key)那样的方法可以从可以由value 查找key。所以我除了利用(国家-首都)对字符串数组生成链表m外,还生成另外两个链表mapContries 和mapCapitals,它们分别由正整数和CountryCh. pairs中的第一、第二列生成。本想通过首都名用遍历法确定key,再在mapContries链表中由key查找到国家名。但是,我的设想失败了。我想,对应的国家-首都在字符串数组中的次序相同,他们生成的链表中同一i对应的国家-首都应该是能够配对的,其实不然。这是因为生成Map用的是HashMap(),项在链表中的次序和他们加入链表时的次序不一致,这在例1中可以看到。所以我只好把这两个链表在转化为数组mapContries.values().toArray(),再利用数组的索引来找到国家名。所幸转化成的两数组中,国家-首都倒是配对的。

 

本程序定义了方法,fill(Map m, String[][] d)方法用来从“国家-首都“字符串数组生成链表m;而fill2(Map m1,Map m2, String[][] d) 方法则生成链表mapContries 和mapCapitals。最后,查“东京”的国名得到了“日本”,测试成功。

 

例3 利用Map的查询

// MapTest2.java

import java.util.*;

import com.shps.util.*;

 

public class MapTest2 {

 static String[][] pairs = CountryChs.pairs ;

 static int length = pairs.length ;

public static void main(String[] args) {

 Map m = new HashMap();

 fill(m, pairs);

 Map mapContries = new HashMap();

 Map mapCapitals = new HashMap();

 fill2(mapContries ,mapCapitals, pairs);

 Object[] contries = mapContries.values().toArray(); 

 Object[] capitals = mapCapitals.values().toArray(); 

//Test Mapm

 if(m.containsKey("巴勒斯坦"))

   System.out.println("有巴勒斯坦国");

 else

   System.out.println("找不到巴勒斯坦国");

 System.out.println("俄罗斯的首都是" + m.get("俄罗斯"));

 

// Test other two Map 找首都为东京的国家

  String capi = "东京"; 

  for(int i=0; i

    if(capitals[i]==capi)

      System.out.println(capi +

       "是" +contries[i] +"首都");

} //main()

 

 static void fill(Map m, String[][] d){

  for(int i=0; i

     Pair p = new Pair(d[i][0], d[i][1]);

     m.put(p.key, p.value);

   }

 }

 static void fill2(Map m1,Map m2, String[][] d){

  for(int i=0; i

     m1.put(i, d[i][0]);

     m2.put(i, d[i][1]);

   }

 }

}

程序的输出为:

找不到巴勒斯坦国

俄罗斯的首都是莫斯科

东京是日本首都

 

查找还是用ArrayList更方便

 

从上面的例子中我们可以看到,由于Map容器没有索引,所以从value 查 key 很不方便。那么有没有一种容器,既有容器可以自由的优点,又有数组利用索引便捷操作的长处?有!那就是数组列表ArrayList。

下面的程序第一段演示Map 的值创建一个ArrayList,然后任意截取一段打印出来。而第二段分别用国家和首都字符串直接创建两个ArrayList,用一首都名查找它的国家名。双向查找同样的方便。

 

例4 用ArrayList查找

 

// ArrayListTest.java

import java.util.*;

import com.shps.util.*;

 

public class ArrayListTest {

public static void main(String[] args) {

 Map m = new HashMap();

 String[][] d = CountryChs.pairs;

 int len = d.length;

 for(int i=0; i

     m.put(d[i][0], d[i][1]);

 

// 生成m的值的列表,并显示其一段

 Collection values = m.values();

 List list = new ArrayList(values);

 List sub = list.subList(37, 46); 

 System.out.println(sub.toString());

 

// 分别创建国家和首都的ArrayList,用于查找

 List contryList = new ArrayList();

 List capitalList = new ArrayList();

 for(int i=0; i

  contryList.add(d[i][0]);

  capitalList.add(d[i][1]);

 }

 

// 测试查找功能

 String find = "哈瓦那";

 System.out.print(find + "是"); 

 for(int i=0;i

  if(capitalList.get(i) == find)

    System.out.println(contryList.get(i) + "的首都");  

  }

}

}

用 SAP S/4HANA Configure Predefined Custom Fields 玩转预定义自定义字段:从概念到实战 SAP预定义自定义字段配置指南:安全扩展业务模型的云原生方案 摘要: 本文系统介绍SAP S/4HANA Cloud中预定义自定义字段的配置方法,对比普通自定义字段与预定义字段的区别,阐述其技术特点与业务价值。重点解析"Configure Predefined Custom Fields"应用的核心功能,包括字段元数据配置、多语言支持、UI集成等能力,并通过业务伙伴扩展案例演示完整实施流程。文章指出预定义字段方案在云环境下的独特优势:既满足业务扩展需求,又能保证系统可升级性,是SaaS环 阅读详情

相关推荐

【实战揭秘】高胜率集合竞价抓涨停策略:融合MACD背离与斐波那契的量化模型

本文揭秘了一种高胜率集合竞价抓涨停策略,融合MACD背离与斐波那契数列的量化模型。通过量能异动、技术形态突破和资金共识形成的交叉验证,该策略在实盘中表现出色。文章详细解析了MACD背离的量化实现细节、斐波那契数列的实战应用,以及策略的量化建模过程,帮助投资者提升交易胜率。

herb5的博客 1556

java 动态添加map元素_Java集合 - Map接口

Map接口主要内容: ① Map接口1.1 各接口存储数据的特点 1.2 Map存储结构的理解 图示: 1.3 HashMap底层源码实现(1)HashMap在jdk7中实现原理 (2)HashMap在jdk8中相较于jdk7在底层实现方面的不同 (3)HashMap底层典型属性的属性的说明 1.4 LinkedHashMap的底层实现原理(了解)LinkedHashMap底层使用的结构与Has...

weixin_36165323的博客 1085

ESP-SR实战:从零搭建智能语音唤醒与命令识别系统

本文详细介绍了如何利用乐鑫ESP-SR框架,从零开始搭建一个完整的离线智能语音交互系统。内容涵盖硬件选型(推荐ESP32-S3与数字麦克风)、开发环境配置(ESP-IDF与ESP-ADF),并深入解析了AFE声学前端、WakeNet唤醒词检测和MultiNet命令词识别三大核心模块的工作原理与实战配置。通过具体的代码示例和调试技巧,指导开发者快速实现高识别率的语音唤醒与命令控制功能。

weixin_29161785的博客 299

map的使用

JAVA链表Map的用法   JAVA的容器设计中有一个链表Map类,它是由一对对象(key, value) 组成的一个链。(key, value)键值对。由键名很容易找到它对应的值,WONDOWS的注册表就是由键值对构成的链。链表的优越性在于它随时可以添加和删除一项,它的缺点是没有索引,不方便顺序获取数据。 Map是个抽象类,不能用构键器来构造一个Map类实例,我们必须用

答案是肯定的 859

Trae编程工具Cline插件深度集成与Claude 3.7 API Key高级配置实战

本文详细介绍了如何在Trae编程工具中深度集成Cline插件并配置Claude 3.7 API Key的高级技巧。通过实战案例,展示了如何提升代码补全质量、实现多轮对话记忆及自定义代理设置,特别适合全栈工程师和需要私有化AI服务的团队。文章还涵盖了安装流程、API Key获取方式及企业级部署的最佳实践。

weixin_28829903的博客 436

【数据集】waymo motion dataset介绍与数据解析可视化

waymo motion数据集下载,数据描述,数据特征和地图特征,数据解析并完成数据可视化

shuaixio的博客 5180

java的map是什么_java的map是什么?

Map提供的是一种双列映射的存储集合,它能够提供一对一的数据处理能力,双列中的第一列我们称为key,第二列就是value,一个key只能够在一个Map中出现最多一次,通过一个key能够获取Map中唯一一个与之对应的value值,正是它的这种一对一映射的数据处理关系,在实际应用中可以通过一个key快速定位到对应的value。(推荐:java视频教程)综合上面的概念,可以概括出以下几个核心点:1、Ma...

weixin_32797081的博客 798

ADS新手必看:ICCAP数据导入与导出CSV的完整流程(附常见问题解决)

本文为ADS新手详细讲解了如何将ICCAP测试数据导入ADS进行仿真分析,并导出为通用CSV格式的完整流程。内容涵盖文件格式解析、导入设置、数据验证、处理技巧及常见问题排查,重点解决了数据文件导入过程中的兼容性与单位映射等核心难点,帮助射频工程师高效连接测量与仿真环节。

peace的博客 557

【JAVA花里胡哨】链式操作MAP

【JAVA花里胡哨】链式操作MAP

KoviChen技术博客 1585

《QT+PCL》点云配准进阶——GROR配准

GROR点云配准

阁楼 1318

绕过App某加密企业版加固Frida检测

可以发现dlsym函数加载了两次pthread_create,可以认为这两个进程(或某一个进程)是和Frida的检测有关的,于是为了绕过检测,我们可以让它加载一个虚假的pthread_create函数,得到一个空结果绕过检测。成功绕过了libnllvm1717052779924.so的检测,又到了libface_nllvm.so的检测,使用同样的方法去绕过libface_nllvm.so的检测,代码我这里就不上了,大家可以自己修改以下。dlsym()函数的作用是在已经加载的动态链接库中查找指定符号的地址。

墨痕诉清风的博客 1621

map=null赋值问题

如果map为null,则无法添加值,因不可在空的对象上,添加值。 Map<String,String> map=null;         if(map==null){             System.out.println("为空,无法添加值");             map.put("key","value");         }                  S...

zyzn1425077119的博客 5014

C#函数返回多个值实现实例

本文实例讲解C#函数返回多个值多种实现方法。

qq_30725967的博客 1170

JAVA链表Map的常见用法

JAVA的容器设计中有一个链表Map类,它是由一对对象(key, value) 组成的一个链。(key, value)键值对。由键名很容易找到它对应的值,WONDOWS的注册表就是由键值对构成的链。链表的优越性在于它随时可以添加和删除一项,它的缺点是没有索引,不方便顺序获取数据。 Map是个抽象类,不能用构键器来构造一个Map类实例,我们必须用 Map m = new HashMap(); 来建立一个Map。实际上我们使用的是HashMap的方法(对Map的抽象方法的具体实现)

Thinkingcao的专栏 2766

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[Java]Java中哈希表之LinkedHashMap的常见用法及原理

https://www.jianshu.com/p/8f4f58b4b8ab

一杯糖不加咖啡 1027

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java300集-Map-hashmap-equals和hashcode

Map • Map是接口,存储一组键值对象, 提供key到value的映射 • Key 唯一 无序 • value 不唯一 无序 package cn.bjsxt.collection; import java.util.HashMap; import java.util.Map; /** * 测试Map的基本用法 * @author Administrator * */ publi...

xw_Summer的博客 350

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java 集合核心教程:List/Set/Map/Queue 用法与底层原理详解

本文系统介绍了Java集合框架的核心知识,包括集合与数组的区别、Collection和Map两大体系及其常用实现类。重点讲解了List、Set、Queue的特性及使用场景,详细分析了ArrayList和LinkedList的实现原理及遍历方式。针对Map接口,阐述了HashMap的关键特性及遍历方法,并补充了面试必备的哈希冲突解决、扩容机制等知识点。最后介绍了Collections和Arrays工具类的常用方法。通过清晰的代码示例,帮助开发者掌握集合框架的选择与使用技巧,提升Java编程能力。

2301_80089095的博客 638

Java集合框架-Map

底层原理:底层数据结构依然是基于哈希表实现的,只是每个键值对元素又额外的多了一个双链表的机制记录元素顺序(保证有序)。底层原理:HashMap底层是基于哈希表实现的,实现类似HashSet,实际上:原来学的Set系列集合的底层就是基于map实现的,只是Set集合中的元素只要键数据,不要值数据而已。原理:TreeMap跟TreeSet集合的底层原理是一样的,都是基于红黑树实现的排序,自定义排序方法也一样:继承Comparable或TreeMap有参构造传入比较器。

m0_72945550的博客 91

Android面试知识点总结分析(三)Map接口方法

java记录之Map Mapkey-value映射的接口,是由数组和链表组成的数据结构 支持的方法 1.int size() 返回key-value映射的数量 2.boolean isEmpty() 返回map是否为空 3.boolean containsKey(Object key) map中是否包含当前key 如果key的类型和map的key的类型不一致,则抛出ClassCastExcepti...

semenry的专栏 248

Collection框架;List,Set,Map接口

Collection框架一、Java Collections集合框架二、补充介绍一些数据结构的知识三、list接口四、Set接口五、Map接口六、常用工具类 一、Java Collections集合框架 Java中的集合就像是一个容器用来存储Java对象的,按照其存储结构可以划分为单列集合Collection和双列结合Map。 单列集合Collection: 单列集合的根接口,其下含有两个重要的子接口,List接口和Set接口。 其中List接口特点是元素有序、可重复。 Set接口集合特点是元素无需

cly_32的博客 408

Java Map集合深度解析:从HashMap到ConcurrentHashMap

Map是Java集合框架中存储键值对的核心接口,通过哈希表实现快速查找。其底层原理基于哈希函数计算键的存储位置,当发生哈希冲突时采用链表或红黑树解决。Java 8优化了HashMap性能,当链表长度超过阈值时会转换为红黑树。在并发场景下,ConcurrentHashMap通过分段锁和CAS操作实现线程安全。Map广泛应用于缓存实现、路由表、配置管理等场景,是Java开发者必须掌握的核心数据结构之一。合理选择HashMap、LinkedHashMap、TreeMap或ConcurrentHashMap能显著提

weixin_32466193的博客 258

Map常用的实现类以及Map接口中的常用方法

Map常用的实现类: HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。通过哈希码对其内部的映射关系进行快速查找,因此对于添加和删除映射关系效率较高,并且允许使用null值和null键,但必须保证键的唯一性。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。 LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一.

Leaf_xiaoMing的博客 540

Map_equals_hashCodeJAVA105-109

1、容器Map和HashMap的基本用法以及HashMap和HashTable的区别2、自己实现HashMap(Map底层实现:数组(下标为hashCode) + 链表)3、容器_equals和hashCode_JDK源代码分析4、容器_List_Map底层源码再分析_提高遍历速度

好好学习天天向上 377

java笔记--Map的用法

Map 接口概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。 Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。 Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。 Collectio...

Linias的博客 33万+

Java中Map的深入解析与实战应用

Map是Java中的一个接口,位于java.util包下。它定义了一组用于操作键值对的方法,包括插入、删除、查找和遍历等操作。Map中的每个元素都是一个键值对(Key-Value Pair),键是唯一的,而值则可以是任意的对象。Map是Java中非常强大且灵活的数据结构,它通过键值对的方式提供了高效的数据存取机制。通过深入理解Map接口及其实现类,掌握其基本操作和高级特性,我们可以更加灵活地将其应用于各种开发场景中。希望本文能帮助读者更好地理解和使用Java中的Map。

星途码客的博客 2342

Java集合类详解:List、Set、Queue、Map、Stack的特点与用法

在Java中,集合类(Collections Framework)是一个非常重要的部分,它提供了多种数据结构的实现,以便我们在开发中更方便地管理和操作数据。 本文将详细介绍Java中的几种主要集合类:List、Set、Queue、Map和Stack的特点和用法。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 6783
上一篇: http://guhanjie.iteye.com/blog/1683637
下一篇: java实现银行家算法
FengChueng
博客等级 码龄11年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值