
问题分析:
总结一句:女人孩子先上船。每个乘客有自己的名字和不同的身份,根据身份优先级决定先后输出顺序。
思路分析:
看到这种对应的信息,我的第一考虑还是HashMap,分别对应名字和身份,(但是在这里我没有考虑万一同名咋办,不过还好也不用考虑),我做了一个参照身份表从先到后作为输出参照,如果相匹配就输出,但是女人孩子优先级相同,那我就直接排除孩子,将他的身份赋值为女人,这样按序输出也不影响
代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n= sc.nextInt();
sc.nextLine();
String[] rule={"rat","woman","man","captain"};// 参照模板
LinkedHashMap<String,String> map=new LinkedHashMap<>(n);//有序哈希表
for (int i=0;i<n;i++){
String input=sc.nextLine();
String[] temp=input.split(" ");//整行读取再分割
if (temp[1].equals("child")){
temp[1]="woman";//如果身份是孩子就变成女人
}
map.put(temp[0],temp[1]);//存值
}
for (int i=0;i< rule.length;i++) {//按照模板输出
for (Map.Entry<String, String> entry : map.entrySet()) {
if (entry.getValue().equals(rule[i])) {//遍历查看是否相匹配
System.out.println(entry.getKey());//匹配就输出
}
}
}
}
}
回顾:
这里出现了一个问题,由于哈希的存储机制,存入的值不一定会按照输入的顺序存放,以至于可能会在输出的时候弄乱正确的输出顺序,所以采用LinkedHashMap,可以保证不乱序
感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。

671

被折叠的 条评论
为什么被折叠?



