假如有两条记录:
{"liming","25","class 1","economy"}
{"zhangchang","24","class 2","arts"}
现在我想使用列表容器(List)或者映射容器(Map)来存放,但条件是:查询时只需输入姓名(如liming),即可返回相应的信息(如25、class 1等信息),应该如何实现?应该采用什么容器?我使用Hashmap尝试过,但Hashmap的put(K key, V value)方法只能操作两个参数,所以考虑使用多个Hashmap实现,但实现过程比较麻烦。希望能有高手提供一些方法。如果对问题有不清楚,请留言。
{"liming","25","class 1","economy"}
{"zhangchang","24","class 2","arts"}
现在我想使用列表容器(List)或者映射容器(Map)来存放,但条件是:查询时只需输入姓名(如liming),即可返回相应的信息(如25、class 1等信息),应该如何实现?应该采用什么容器?我使用Hashmap尝试过,但Hashmap的put(K key, V value)方法只能操作两个参数,所以考虑使用多个Hashmap实现,但实现过程比较麻烦。希望能有高手提供一些方法。如果对问题有不清楚,请留言。
import java.util.Map;
import java.util.Scanner;public class Csdn {
public static void main(String[] args) {
Student s1 = new Student("liming", "25", "class 1", "economy");
Student s2 = new Student("zhangchang", "24", "class 2", "arts");
Map<String, Student> m = new HashMap<String, Student>();
m.put(s1.getName(), s1);
m.put(s2.getName(), s2); System.out.println("inpue name:");
Scanner in = new Scanner(System.in);
String name = in.nextLine();
Student s = m.get(name);
if (s != null)
System.out.println("name:" + s.getName() + " age:" + s.getAge()
+ " classes:" + s.getClasses() + " subject:"
+ s.getSubject());
else
System.out.println("不存在此姓名!!"); }
}class Student {
private String name; private String age; private String classes; private String subject; public Student(String name, String age, String classess, String subject) {
this.name = name;
this.age = age;
this.classes = classess;
this.subject = subject;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public String getClasses() {
return classes;
} public void setClasses(String classes) {
this.classes = classes;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSubject() {
return subject;
} public void setSubject(String subject) {
this.subject = subject;
}
}
但是如果姓名有重复的话,就不能使用Map了,只能采用List了。
import java.util.List;public class TestTest { public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
list.add(new Student("liming", 25, "class 1", "economy"));
list.add(new Student("loming", 22, "class 3", "arts"));
list.add(new Student("limin", 22, "class 3", "arts"));
list.add(new Student("zhangchang", 24, "class 2", "arts")); printResult(searchByName(list, "l?min*"));
} public static List<Student> searchByName(List<Student> stus, String name) {
List<Student> list = new ArrayList<Student>();
String search = name.replace('?', '.').replace("*", ".*");
for (int i = 0, k = stus.size(); i < k; i++) {
Student stu = stus.get(i);
if(stu.getName().matches(search)) {
list.add(stu);
}
}
return list;
}
public static void printResult(List<Student> results) {
if(results.size() > 0) {
for(Student stu : results) {
System.out.println(stu);
}
}else{
System.out.println("没有匹配的搜索结果");
}
}
}class Student {
private String name;
private int age;
private String clazz;
private String major; public Student() {
}
public Student(String name, int age, String clazz, String major) {
this.name = name;
this.age = age;
this.clazz = clazz;
this.major = major;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getClazz() {
return clazz;
}
public void setClazz(String clazz) {
this.clazz = clazz;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return this.name + ", " + this.age + ", " + this.clazz + ", " + this.major;
}
}
用数组存进你的数据
用list类容器类,存你的数组。
这样 根据数组的首元素 来分辨数组 返回 其余元素
怎么样?呵呵
因为这样的查询 所以也很好实现
我使用Hashmap尝试过,但Hashmap的put(K key, V value)方法只能操作两个参数,
这样管你多少参数 都无所谓 ~