搜索
首页Javajava教程Map&HashMapde的简单介绍

Map&HashMapde的简单介绍

Jul 23, 2017 pm 05:44 PM
java框架集合

一、Map&HashMap简介

1)Map接口

1. Map接口提供了一中映射关系,其中的元素是键值对(key-value)的形式存储的,能够实现根据Key快速查找value。Key-value可以是任何对象,是以Entry类型的对象实例存在的。

2.Key是不可以重复的,Value是可以重复的。Key-value都可以为null,不过只能有一个key是null。

3.Map支持泛型,Map

4.每个键最多只能映射到一个值

5.Map接口提供了分别返回key值集合、value值集合以及Entry(键值对)集合的方法

6.通过put,remove操作数

2)HashMap实现类

1.  HashMap中的Entry对象是无序排列的,HashMap是Map的一个重要实现类,也是最常用的,基于哈希表是实现

2.  Key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射(key不可重复)


 二、学生选课——使用Map添加学生

案例功能说明

1.通过Map进行学生信息管理,其中key为学生ID,value为学生对象。

2.通过键盘输入学生信息

3.对集合中的学生信息进行增删该查操作

首先创建一个StuMap类来测试Map的使用方法。如下:

 1 /** 2  * 学生类的Map集合类 3  * 
 4  * @author acer 5  * 6  */ 7 public class StuMap { 8     // 用来承装学生类型对象 9     private Map<String, Student> students;10     private static Scanner in;11     {12         in = new Scanner(System.in);13     }14 15     public StuMap() {16         students = new HashMap<String, Student>();17 18     }19    //省略方法,下面的方法会逐个列出20 }

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

和List接口不同,向Map添加对象使用的是put(key,value)方法。以下是使用示例:

 1   /* 2      * 添加学生类 输入学生id, 3      * 判断是否被占用 若未被占用,则输入姓名,创建新的学生对象,并且把该对象添加到Map中 4      * 否则,则提示已有该id 5      */ 6     public void AddStu() { 7         System.out.println("请输入要添加的学生id:"); 8         String Id = in.next();// 接受输入的id 9         Student st=students.get(Id);10         if(st==null){11 12             System.out.println("请输入要添加的学生姓名:");13             String name = in.next();// 接受输入的name14             this.students.put(Id, new Student(Id, name));15         }else{16             System.out.println("此Id已被占用!");17         }18 19     }

再写一个打印输出的测试函数,如:

 1 /* 2      * 打印学生类 3      * 
 4      */ 5     public void PrintStu() { 6         System.out.println("总共有"+this.students.size()+"名学生:"); 7         //遍历keySet 8         for (String s : this.students.keySet()) { 9             Student st=students.get(s);10             if(st!=null){11             System.out.println("学生:" + students.get(s).getId() + "," + students.get(s).getName());12             }13         }14     }

上面的例子是使用Map的keySet()返回Map中的key的Set集合再用if进行判断输出,在Map还可以用entrySet()的方法返回Map中的键值对Entry,如:

 1 /* 2      * 通过entrySet方法遍历Map 3      */ 4     public void EntrySet(){ 5         Set<Entry<String, Student>> entrySet =students.entrySet(); 6         for(Entry<String, Student> entry:entrySet){ 7             System.out.println("取得建:"+entry.getKey()); 8             System.out.println("对应的值:"+entry.getValue().getName()); 9 10         }11     }

最后我们用主函数调用一下这些函数来看看效果如何

1 public static void main(String[] args) {2         StuMap stu = new StuMap();3         for (int i = 0; i < 3; i++) {4             stu.AddStu();5         }6         stu.PrintStu();7         stu.EntrySet();8     }

代码分析:

1.student.get(ID)是采用Map的get()方法,检测是否存在值为ID的学生,如果没有,则返回null。这里的案例是把Map中的key值设为学生的ID值,所以可以用这样的方式来检测,如果key值是学生其他属则性另当别论!!

2.keySet()方法,返回所有键的Set集合。

3.keyset()返回Map中所有的key以集合的形式可用Set集合接收,HashMap当中的映射是无序的。

3.Map还可以用entrySet()的方法返回Map中的键值对Entry,Entry也是Set集合,它可以调用getKey()和getValue()方法来分别得到键值对的”和“

运行结果:


三、学生选课——删除Map中的学生

删除Map中的键值对是调用remove(object key)方法,下面是它的使用示例:

 1 /* 2      * 删除map中映射 3      */ 4     public void RemoveStu(){ 5         do{ 6         System.out.println("请输入要删除的学生id:"); 7         String Id = in.next();// 接受输入的id 8         Student st=students.get(Id); 9         if(st==null){10             System.out.println("此id不存在!");11             12         }else{13             this.students.remove(Id);14             System.out.println("成功删除"+st.getId()+","+st.getName()+"同学");15             break;16         }17         }while(true);18     }

运行结果:


四、学生选课——修改Map中的学生

修改Map中的键值对有两种方法,第一种就是用put方法。其实就是添加方法中的put,使用方法跟添加无异,这里的本质就是利用put把原来的数据给覆盖掉,即修改。

 1 /* 2      * 利用put方法修改Map中的value值 3      */ 4     public void ModifyStu(){ 5         do{ 6             System.out.println("请输入要修改的学生id:"); 7             String Id = in.next();// 接受输入的id 8             Student st=students.get(Id); 9             if(st==null){10                 System.out.println("此id不存在!");11                 12             }else{13                 System.out.println("学生原来的姓名:"+st.getName()+",请输入修改后的姓名:");14                 String name = in.next();// 接受输入的name15                 st=new Student(Id,name);16                 this.students.put(Id,st);17                 System.out.println("成功修改!修改后的学生为:"+st.getId()+","+st.getName()+"同学");18                 break;19             }20             }while(true);21         22     }

除了用put方法外,Map中提供一个叫做replace的方法,知名知其意,就是“替换”的意思。replace的方法使用和put方法一样,这是因为它的内部源码如下:

1 if (map.containsKey(key)) {2      return map.put(key, value);3  } else4      return null;5

可以看出replace方法就是调用put方法来完成修改操作的,但是我们为了和添加put进行区分,最好在使用修改的时候用replace方法进行修改。这样的代码可读性和维护性就增强了。

那么使用replace修改Map中的value值如下:(推荐使用replace方法)

 1 /* 2      * 利用replace方法修改Map中的value值 3      */ 4     public void Modify(){ 5         do{ 6             System.out.println("请输入要修改的学生id:"); 7             String Id = in.next();// 接受输入的id 8             Student st=students.get(Id); 9             if(st==null){10                 System.out.println("此id不存在!");11                 12             }else{13                 System.out.println("学生原来的姓名:"+st.getName()+",请输入修改后的姓名:");14                 String name = in.next();// 接受输入的name15                 st=new Student(Id,name);16                 this.students.replace(Id, st);17                 System.out.println("成功修改!修改后的学生为:"+st.getId()+","+st.getName()+"同学");18                 break;19             }20             }while(true);21     }

运行结果:


五、总结

Map -特点:元素成对出现,key-value,是映射关系,key不能重复,但value可以重复,也就是说,可以多key对一个value。支持泛型如Map

-实现类:HashMap是最常用的,HashMap中是无序排列,其元素中key或value可为null(但只能有一个为null)。

-声明(泛型)举例: 在类中声明 public Map<类型1, 类型2> xxx; 然后再构造方法中this.xxx = new HashMap<类型1, 类型2();

-获取:yy temp = xxx.get(key)

-添加:xxx.put( key(xx型), zz(yy型) );

-返回map中所有key(返回是set型集合形式) set xxxxx = xxx.keyset(); 用于遍历。

-返回map中所有entry对(key-value对)(返回是set型集合形式) set> xxxxx = xxx.entrySet(); 同样用于遍历。 遍历时:for(Entry 元素: xxxxx)

-删除:xxx.remove(key);

-修改可以用put,当put方法传入的key存在就相当于是修改(覆盖);但是推荐使用replace方法!

以上是Map&HashMapde的简单介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JVM性能与其他语言JVM性能与其他语言May 14, 2025 am 12:16 AM

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生产性。1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

Java平台独立性:使用示例Java平台独立性:使用示例May 14, 2025 am 12:14 AM

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允许CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

JVM架构:深入研究Java虚拟机JVM架构:深入研究Java虚拟机May 14, 2025 am 12:12 AM

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

JVM:JVM与操作系统有关吗?JVM:JVM与操作系统有关吗?May 14, 2025 am 12:11 AM

JVMhasacloserelationshipwiththeOSasittranslatesJavabytecodeintomachine-specificinstructions,managesmemory,andhandlesgarbagecollection.ThisrelationshipallowsJavatorunonvariousOSenvironments,butitalsopresentschallengeslikedifferentJVMbehaviorsandOS-spe

Java:写一次,在任何地方跑步(WORA) - 深入了解平台独立性Java:写一次,在任何地方跑步(WORA) - 深入了解平台独立性May 14, 2025 am 12:05 AM

Java实现“一次编写,到处运行”通过编译成字节码并在Java虚拟机(JVM)上运行。1)编写Java代码并编译成字节码。2)字节码在任何安装了JVM的平台上运行。3)使用Java原生接口(JNI)处理平台特定功能。尽管存在挑战,如JVM一致性和平台特定库的使用,但WORA大大提高了开发效率和部署灵活性。

Java平台独立性:与不同的操作系统的兼容性Java平台独立性:与不同的操作系统的兼容性May 13, 2025 am 12:11 AM

JavaachievesPlatFormIndependencethroughTheJavavIrtualMachine(JVM),允许Codetorunondifferentoperatingsystemsswithoutmodification.thejvmcompilesjavacodeintoplatform-interploplatform-interpectentbybyteentbytybyteentbybytecode,whatittheninternterninterpretsandectectececutesoneonthepecificos,atrafficteyos,Afferctinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging

什么功能使Java仍然强大什么功能使Java仍然强大May 13, 2025 am 12:05 AM

JavaispoperfulduetoitsplatFormitiondence,对象与偏见,RichstandardLibrary,PerformanceCapabilities和StrongsecurityFeatures.1)Platform-dimplighandependectionceallowsenceallowsenceallowsenceallowsencationSapplicationStornanyDevicesupportingJava.2)

顶级Java功能:开发人员的综合指南顶级Java功能:开发人员的综合指南May 13, 2025 am 12:04 AM

Java的顶级功能包括:1)面向对象编程,支持多态性,提升代码的灵活性和可维护性;2)异常处理机制,通过try-catch-finally块提高代码的鲁棒性;3)垃圾回收,简化内存管理;4)泛型,增强类型安全性;5)ambda表达式和函数式编程,使代码更简洁和表达性强;6)丰富的标准库,提供优化过的数据结构和算法。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器