当前位置: 首页 > news >正文

官方网站怎样做30个免费货源网站

官方网站怎样做,30个免费货源网站,手机2345网址导航老版下载,中国商标注册网官方网站为什么使用Map 我们知道,List是一种顺序列表,如果有一个存储学生Student实例的List,要在List中根据name查找某个指定的Student的分数,应该怎么办? 最简单的方法是遍历List并判断name是否相等,然后返回指定…

为什么使用Map

我们知道,List是一种顺序列表,如果有一个存储学生Student实例的List,要在List中根据name查找某个指定的Student的分数,应该怎么办?

最简单的方法是遍历List并判断name是否相等,然后返回指定元素:

List<Student> list = ...
Student target = null;
for (Student s : list) {if ("Xiao Ming".equals(s.name)) {target = s;break;}
}
System.out.println(target.score);

这种需求其实非常常见,即通过一个键去查询对应的值。使用List来实现存在效率非常低的问题,因为平均需要扫描一半的元素才能确定,而Map这种键值(key-value)映射表的数据结构,作用就是能高效通过key快速查找value(元素)。

Map来实现根据name查询某个Student的代码如下:

import java.util.HashMap;
import java.util.Map;
public class Main {public static void main(String[] args) {Student s = new Student("Xiao Ming", 99);Map<String, Student> map = new HashMap<>();map.put("Xiao Ming", s); // 将"Xiao Ming"和Student实例映射并关联Student target = map.get("Xiao Ming"); // 通过key查找并返回映射的Student实例System.out.println(target == s); // true,同一个实例System.out.println(target.score); // 99Student another = map.get("Bob"); // 通过另一个key查找System.out.println(another); // 未找到返回null}
}class Student {public String name;public int score;public Student(String name, int score) {this.name = name;this.score = score;}
}

通过上述代码可知:Map<K, V>是一种键-值映射表,当我们调用put(K key, V value)方法时,就把keyvalue做了映射并放入Map。当我们调用V get(K key)时,就可以通过key获取到对应的value。如果key不存在,则返回null。和List类似,Map也是一个接口,最常用的实现类是HashMap

如果只是想查询某个key是否存在,可以调用boolean containsKey(K key)方法。

如果我们在存储Map映射关系的时候,对同一个key调用两次put()方法,分别放入不同的value,会有什么问题呢?例如:

import java.util.HashMap;
import java.util.Map;
public class Main {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("apple", 123);map.put("pear", 456);System.out.println(map.get("apple")); // 123map.put("apple", 789); // 再次放入apple作为key,但value变为789System.out.println(map.get("apple")); // 789}
}

重复放入key-value并不会有任何问题,但是一个key只能关联一个value。在上面的代码中,一开始我们把key对象"apple"映射到Integer对象123,然后再次调用put()方法把"apple"映射到789,这时,原来关联的value对象123就被“冲掉”了。实际上,put()方法的签名是V put(K key, V value),如果放入的key已经存在,put()方法会返回被删除的旧的value,否则,返回null

始终牢记:Map中不存在重复的key,因为放入相同的key,只会把原有的key-value对应的value给替换掉。
此外,在一个Map中,虽然key不能重复,但value是可以重复的:

Map<String, Integer> map = new HashMap<>();
map.put("apple", 123);
map.put("pear", 123); // ok

遍历Map

Map来说,要遍历key可以使用for each循环遍历Map实例的keySet()方法返回的Set集合,它包含不重复的key的集合:

import java.util.HashMap;
import java.util.Map;
public class Main {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("apple", 123);map.put("pear", 456);map.put("banana", 789);for (String key : map.keySet()) {Integer value = map.get(key);System.out.println(key + " = " + value);}}
}Run
同时遍历key和value可以使用for each循环遍历Map对象的entrySet()集合,它包含每一个key-value映射:import java.util.HashMap;
import java.util.Map;
public class Main {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("apple", 123);map.put("pear", 456);map.put("banana", 789);for (Map.Entry<String, Integer> entry : map.entrySet()) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " = " + value);}}
}

MapList不同的是,Map存储的是key-value的映射关系,并且,它不保证顺序。在遍历的时候,遍历的顺序既不一定是put()时放入的key的顺序,也不一定是key的排序顺序。使用Map时,任何依赖顺序的逻辑都是不可靠的。以HashMap为例,假设我们放入"A""B""C"这3个key,遍历的时候,每个key会保证被遍历一次且仅遍历一次,但顺序完全没有保证,甚至对于不同的JDK版本,相同的代码遍历的输出顺序都是不同的!

遍历Map时,不可假设输出的key是有序的!

练习

请编写一个根据name查找score的程序,并利用Map充当缓存,以提高查找效率:

import java.util.*;
public class Main {public static void main(String[] args) {List<Student> list = List.of(new Student("Bob", 78),new Student("Alice", 85),new Student("Brush", 66),new Student("Newton", 99));var holder = new Students(list);System.out.println(holder.getScore("Bob") == 78 ? "测试成功!" : "测试失败!");System.out.println(holder.getScore("Alice") == 85 ? "测试成功!" : "测试失败!");System.out.println(holder.getScore("Tom") == -1 ? "测试成功!" : "测试失败!");}
}class Students {List<Student> list;Map<String, Integer> cache;Students(List<Student> list) {this.list = list;cache = new HashMap<>();}/*** 根据name查找score,找到返回score,未找到返回-1*/int getScore(String name) {// 先在Map中查找:Integer score = this.cache.get(name);if (score == null) {// TODO:}return score == null ? -1 : score.intValue();}Integer findInList(String name) {for (var ss : this.list) {if (ss.name.equals(name)) {return ss.score;}}return null;}
}class Student {String name;int score;Student(String name, int score) {this.name = name;this.score = score;}
}

小结

Map 是一种映射表,可以通过key快速查找value

可以通过for each遍历keySet(),也可以通过for each遍历entrySet(),直接获取key-value

最常用的一种Map实现是HashMap

http://www.zhongyajixie.com/news/41734.html

相关文章:

  • 咪咪做网站网店营销
  • 外贸网站优化在线推广中国 日本 韩国
  • 黑色赚钱的网站我国的网络营销公司
  • 做蛋糕视频的网站培训机构招生方案模板
  • 最新网站开发需求文档竞价sem托管
  • 图片网站怎么做wordpress外贸独立站
  • 杭州公布疫情流调情况seo运营培训
  • 旅行社b2b网站建设方案哪里可以学seo课程
  • 网站建设页面底部叫什么seo网站关键词优化
  • 邹城做网站网上推广的平台有哪些
  • 包头网站建设哪家好2021最新免费的推广引流软件
  • 数据开放网站建设内容打广告推广怎么做
  • 淮安经济技术开发区建设局网站谷歌seo服务公司
  • 中国建设监理协会网站个人会员系统栏什么是seo如何进行seo
  • 科技企业网站如何建设个人推广网站
  • 云南房产网站建设数据分析网页
  • 芜湖做网站公司网站优化
  • 外贸网站设计的公司郑州网络推广专业公司
  • 深圳 网站建设培训学校电销系统软件排名
  • 南宁网站建设代理什么是搜索引擎销售
  • 广东手机网站建设品牌百度搜索指数的数据来源
  • 昌平沙河网站建设产品推广思路
  • 网站建设浅析网站页面优化包括
  • 怎么恢复网站数据库百度大数据查询
  • 万州网站建设阿里巴巴指数查询
  • 专业APP客户端做网站优化网站排名如何
  • 信阳网站开发公司电话qq推广工具
  • 产品经理兼职做网站报酬中国网站排名网官网
  • 江苏网站设计成人大学报名官网入口
  • html旅游网站模板大数据统计网站