您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Map&HashMapde的简单介绍

2024/6/6 16:39:23发布26次查看
一、map&hashmap简介
1)map接口
1. map接口提供了一中映射关系,其中的元素是键值对(key-value)的形式存储的,能够实现根据key快速查找value。key-value可以是任何对象,是以entry类型的对象实例存在的。
2.key是不可以重复的,value是可以重复的。key-value都可以为null,不过只能有一个key是null。
3.map支持泛型,map<k,v>
4.每个键最多只能映射到一个值
5.map接口提供了分别返回key值集合、value值集合以及entry(键值对)集合的方法
6.通过put<k key,v value>,remove<object key>操作数
2)hashmap实现类1.  hashmap中的entry对象是无序排列的,hashmap是map的一个重要实现类,也是最常用的,基于哈希表是实现
2.  key值和value值都可以为null,但是一个hashmap只能有一个key值为null的映射(key不可重复)
 二、学生选课——使用map添加学生案例功能说明1.通过map<string,student>进行学生信息管理,其中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 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<yy1, yy2>。-实现类: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<entry<xx, yy>> xxxxx = xxx.entryset(); 同样用于遍历。 遍历时:for(entry<xx,yy> 元素: xxxxx)
-删除:xxx.remove(key);
-修改:可以用put,当put方法传入的key存在就相当于是修改(覆盖);但是推荐使用replace方法!
以上就是map&hashmapde的简单介绍的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product