首页 文章 精选 留言 我的

精选列表

搜索[对象模型],共10000篇文章
优秀的个人博客,低调大师

Java遍历Map对象的四种方式

关于java中遍历map具体哪四种方式,请看下文详解吧。 方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。 1 2 3 4 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println( "Key = " + entry.getKey() + ", Value = " + entry.getValue()); } 方法二 在for-each循环中遍历keys或values。 如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。 1 2 3 4 5 6 7 8 9 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //遍历map中的键 for (Integer key : map.keySet()) { System.out.println( "Key = " + key); } //遍历map中的值 for (Integer value : map.values()) { System.out.println( "Value = " + value); } 该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。 方法三使用Iterator遍历 使用泛型: 1 2 3 4 5 6 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry<Integer, Integer> entry = entries.next(); System.out.println( "Key = " + entry.getKey() + ", Value = " + entry.getValue()); } 不使用泛型: 1 2 3 4 5 6 7 8 Map map = new HashMap(); Iterator entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry entry = (Map.Entry) entries.next(); Integer key = (Integer)entry.getKey(); Integer value = (Integer)entry.getValue(); System.out.println( "Key = " + key + ", Value = " + value); } 你也可以在keySet和values上应用同样的方法。 该种方式看起来冗余却有其优点所在。首先,在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。根据javadoc的说明,如果在for-each遍历中尝试使用此方法,结果是不可预测的。 从性能方面看,该方法类同于for-each遍历(即方法二)的性能。 方法四、通过键找值遍历(效率低) 1 2 3 4 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Integer key : map.keySet()) { Integer value = map.get(key); System.out.println( "Key = " + key + ", Value = " + value); 作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果你安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。 总结 如果仅需要键(keys)或值(values)使用方法二。如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。否则使用方法一(键值都要)。

优秀的个人博客,低调大师

Java 面向对象 之 匿名内部类 实例 2

http://www.verejava.com/?id=16992879139164 /** 知识点: 匿名内部类 题目: 摩托车上装有警报器,当有人碰到摩托车时, 警报器发出报警响声 思路: 1. 抽象出类: 1.1 摩托车(Moto),报警器(Alarm), 人(Person) 2. 找出类的关系: 2.1 摩托车上装有报警器 Alarm -> Moto(1对1) 2.2 警报器有不同品牌的分类 Alarm 3. 找出类属性: 3.1 Moto(品牌,报警器的引用) 3.2 Alarm(品牌) 3.3 Person(姓名) 4. 找出类方法: 4.1 摩托车上装有报警器 Moto{load(Alarm alarm)} 4.2 摩托车被人碰到 Moto{touched(Person p)} 4.3 警报器发出响声 Alarm{beep()} */ public class TestMoto3 { public static void main(String[] args) { //准备生产一台南方摩托车 Moto moto = new Moto("南方"); moto.load(new Alarm() { public void beep(Person p) { System.out.println(p.getName() + " 碰到了警报器 "); } }); //这个时候李明过来了 Person p = new Person("李明"); //李明不小心碰到了摩托车, 摩托车发出了报警声 moto.touched(p); } } abstract class Alarm { //报警器能发出报警声 public abstract void beep(Person p); } class Moto { private String brand;//品牌 private Alarm alarm;//报警器引用 public Moto(String brand) { this.brand = brand; } //装载警报器 public void load(Alarm alarm) { this.alarm = alarm; } //摩托车被人碰到 public void touched(Person p) { alarm.beep(p); } } class Person { private String name;//姓名 public Person(String name) { this.name = name; } public String getName() { return this.name; } } http://www.verejava.com/?id=16992879139164

优秀的个人博客,低调大师

Java 面向对象 之 基本数据 包装类

http://www.verejava.com/?id=16992869307361 /** 知识点: 基本数据类型 对应的 包装类 1. 基本数据类型包括: 1. 数值类型 1.1 byte -> Byte 1.2 short -> Short 1.3 int -> Integer 1.4 long -> Long 1.5 float -> Float 1.6 double -> Double 2. 字符型 2.1 char -> Character 3. 布尔型 3.1 boolean -> Boolean 2. 包装类的应用 2.1 使基本数据类型也可以有引用类型 2.2 实现数据类型的转换功能 注意: 1. 在jdk 1.5 之后 基本数据类型和包装类型是可以相互赋值 */ public class WrapClass { public static void main(String[] args) { Byte a=1; byte b=10; a=b; System.out.println(a.byteValue()); System.out.println(Integer.valueOf(b)); //包装类的应用 主要是 数据类型的转换 //整型转 double 型 int c=100; Integer d=new Integer(c); System.out.println(d.doubleValue()); //整型转 long 型 System.out.println(d.longValue()); //整型转 字符串 String str=Integer.toString(d); System.out.println(str); //字符串转 整型 int e=Integer.parseInt(str); System.out.println(e); System.out.println(Integer.toBinaryString(e)); System.out.println(Integer.signum(e)); System.out.println(Integer.bitCount(e)); System.out.println(Integer.highestOneBit(e)); System.out.println(Integer.numberOfLeadingZeros(e)); } } http://www.verejava.com/?id=16992869307361

优秀的个人博客,低调大师

Java 面向对象 之 接口 火车票实例

http://www.verejava.com/?id=16992821172850 /** 接口的实际应用: 题目: 两个人A,B开发一个火车票显示功能A负责客户端, B负责服务器端 思路: 1. 抽象出类: 1.1 客户端显示类(Terminal) 1.2 服务器端服务类(TrainService) 1.3 火车票(Ticket) 2. 找出类关系: 2.1 客户端 调用 服务器端 的获取火车票信息显示 TrainService -> Terminal(调用) 2.2 服务器端 提供 火车票信息 给 客户端 Ticket->TrainService(多对1) Ticket -> Terminal(多对多) 3. 找出类属性: 3.1 Ticket(车次,出发地,到达地,票价) 3.2 TrainService(火车站名称) 3.3 Terminal(代售点名称) 4. 找出类方法: 4.1 TrainService: 提供火车票信息 Ticket[] getTickets() 4.2 Terminal: 显示火车票信息 display() */ import java.util.Scanner; public class ApplyInterface { public static void main(String[] args) { //北京西站火车票服务器打开 TrainService beijingWestService = new BeijingWestTrainService("北京西站"); //北京站火车票服务器打开 TrainService beijingService = new BeijingTrainService("北京站"); //我是北京朝阳区大黄庄的 代售点 Terminal t = new Terminal("北京朝阳区大黄庄的 代售点"); Scanner in = new Scanner(System.in); System.out.println("请输入要查的火车站代码 1:北京西站 2:北京站"); int trainId = in.nextInt(); if (trainId == 1) { t.setTrainService(beijingWestService); } if (trainId == 2) { t.setTrainService(beijingService); } //打开火车电脑终端 查看火车票信息 t.display(); } } class Ticket { private String id;//车次 private String startCity;//出发城市 private String endCity;//到达城市 private float price;//票价 public Ticket(String id, String startCity, String endCity, float price) { this.id = id; this.startCity = startCity; this.endCity = endCity; this.price = price; } public String getId() { return this.id; } public String getStartCity() { return this.startCity; } public String getEndCity() { return this.endCity; } public float getPrice() { return this.price; } } interface TrainService { //A和B约定一个提供火车票的方法 public Ticket[] getTickets(); //获取火车站名字 public String getName(); } class BeijingWestTrainService implements TrainService { private String name; public BeijingWestTrainService(String name) { this.name = name; } public String getName() { return this.name; } //提供火车票的实现方法 public Ticket[] getTickets() { Ticket[] tickets = { new Ticket("T1", "北京", "长沙", 175f) }; return tickets; } } class BeijingTrainService implements TrainService { private String name; public BeijingTrainService(String name) { this.name = name; } public String getName() { return this.name; } //提供火车票的实现方法 public Ticket[] getTickets() { Ticket[] tickets = { new Ticket("T215", "北京", "吉林", 130f) }; return tickets; } } class Terminal { private String proxy;//代售点名称 private Ticket[] tickets;// 火车票引用 private TrainService trainService;// 服务器接口引用 public Terminal(String proxy) { this.proxy = proxy; } public void setTrainService(TrainService trainService) { this.trainService = trainService; } //显示火车票的信息 // 思路: // 1. 首先要从服务器端 获取 火车票信息 // 2. 循环把火车票信息显示在电脑终端上 public void display() { //获取火车票信息 tickets = trainService.getTickets(); //输出火车票信息 System.out.println(trainService.getName()); System.out.println("车次------出发地------到达地------票价"); if (tickets != null) { for (int i = 0; i < tickets.length; i++) { System.out.println(tickets[i].getId() + "------" + tickets[i].getStartCity() + "------" + tickets[i].getEndCity() + "------" + tickets[i].getPrice()); } } } } http://www.verejava.com/?id=16992821172850

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册