假如有两条记录:
{"liming","25","class 1","economy"}
{"zhangchang","24","class 2","arts"}
现在我想使用列表容器(List)或者映射容器(Map)来存放,但条件是:查询时只需输入姓名(如liming),即可返回相应的信息(如25、class 1等信息),应该如何实现?应该采用什么容器?我使用Hashmap尝试过,但Hashmap的put(K key, V value)方法只能操作两个参数,所以考虑使用多个Hashmap实现,但实现过程比较麻烦。希望能有高手提供一些方法。如果对问题有不清楚,请留言。

解决方案 »

  1.   

    import java.util.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;
    }
    }
      

  2.   

    姓名如果是唯一的话,可以使用 HashMap 来做,这样搜索的效率较高,
    但是如果姓名有重复的话,就不能使用Map了,只能采用List了。
      

  3.   

    import java.util.ArrayList;
    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;
        }
    }
      

  4.   

    像LS学习,LZ把分都给LS的吧,呵呵。
      

  5.   

    楼主是从其它语言转过来的吧,你java的话,最好把{ "liming ", "25 ", "class   1 ", "economy "} 封装到一个对象中, hashmap.put(key,对象)这样即可保存你的内容 这才符合面向对象思想.  其实2楼的代码就对了.  我在这里只是说明一下思路.
      

  6.   

    to: hellox你写得也不错哦,互相学习,一起提高 :)
      

  7.   

    我来说个思路:
    用数组存进你的数据
    用list类容器类,存你的数组。
    这样 根据数组的首元素 来分辨数组 返回 其余元素 
    怎么样?呵呵
      

  8.   

    查询时只需输入姓名(如liming)
    因为这样的查询 所以也很好实现 
    我使用Hashmap尝试过,但Hashmap的put(K   key,   V   value)方法只能操作两个参数,
    这样管你多少参数 都无所谓 ~