A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币
本帖最后由 费世福 于 2015-8-18 22:43 编辑

package it.cast.hashset;
import java.util.HashSet;
public class Test {
        /**
         * 要求:将Student学号003的学生的名字“ddd”换成"fff"
         *                 
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                HashSet<Student> hashSet = new HashSet<Student>();
                hashSet.add(new Student("001","qqq",18));
                hashSet.add(new Student("002","aaa",14));
                hashSet.add(new Student("003","ddd",13));
               
                Student student2 = new Student(null,"fff",13);
                hashSet.add(student2);
                student2.setName("003");
                hashSet.remove(student2);
                //遍历显示
                for (Student student : hashSet) {
                        System.out.println(student);
                }
        }
}
/**************************************************************************
package it.cast.hashset;

public class Student {
                //成员属性
                private String studentid;
                private String name;
                private int age;
               
                //构造方法
                public Student() {
                        super();
                        // TODO Auto-generated constructor stub
                }
                public Student(String name,String studentid,int age) {
                        super();//父类是Object
                        this.age = age;
                        this.name = name;
                        this.studentid = studentid;
                       
                }
                //获得成员属性的get与set
                public String getName() {
                        return name;
                }
                public void setName(String name) {
                        this.name = name;
                }
                public String getStudentid() {
                        return studentid;
                }
                public void setStudentid(String studentid) {
                        this.studentid = studentid;
                }
               
                public int getAge() {
                        return age;
                }
                public void setAge(int age) {
                        this.age = age;
                }
                //toString
                @Override
                public String toString() {
                        return "Student [studentid=" + studentid + ", name=" + name
                                        + ", age=" + age + "]";
                }
                @Override
                public int hashCode() {
                        final int prime = 31;
                        int result = 1;
                        //result = prime * result + age;
                        result = prime * result + ((name == null) ? 0 : name.hashCode());
                        /*result = prime * result
                                        + ((studentid == null) ? 0 : studentid.hashCode());*/
                        return result;
                }
        /*        @Override
                public int hashCode() {
                        final int prime = 31;
                        int result = 1;
                        result = prime * result
                                        + ((studentid == null) ? 0 : studentid.hashCode());
                        return result;
                }*/
                @Override
                public boolean equals(Object obj) {
                        if (this == obj)
                                return true;
                        if (obj == null)
                                return false;
                        if (getClass() != obj.getClass())
                                return false;
                        Student other = (Student) obj;
                /*        if (age != other.age)
                                return false;*/
                        if (name == null) {
                                if (other.name != null)
                                        return false;
                        } else if (!name.equals(other.name))
                                return false;
                        /*if (studentid == null) {
                                if (other.studentid != null)
                                        return false;
                        } else if (!studentid.equals(other.studentid))
                                return false;*/
                        return true;
                }
               
                /*@Override
                public int hashCode() {
                        final int prime = 31;
                        int result = 1;
                        result = prime * result
                                        + ((studentid == null) ? 0 : studentid.hashCode());
                        return result;
                }

                @Override
                public boolean equals(Object obj) {
                        if (this == obj)
                                return true;
                        if (obj == null)
                                return false;
                        if (getClass() != obj.getClass())
                                return false;
                        Student other = (Student) obj;
                        if (studentid == null) {
                                if (other.studentid != null)
                                        return false;
                        } else if (!studentid.equals(other.studentid))
                                return false;
                        return true;
                }
                */
               
}




HashSet修改元素.png (166.8 KB, 下载次数: 7)

HashSet修改元素.png

最佳答案

查看完整内容

理解 理解 这样的确可以实现{:2_44:}

点评

HashSet,是先算出他的hashcode然后将内容存入。那么,我在自定义类中,重写了hashset和equals的方法。并以name单独的作为算出hashcode的对象。  发表于 2015-8-18 21:34

15 个回复

正序浏览
怎么没人关注呢{:2_42:}
回复 使用道具 举报
呵呵 看清楚了
回复 使用道具 举报
好长的代码!头晕了
回复 使用道具 举报
哦哦,再看一遍明白了,谢谢楼主
回复 使用道具 举报
如果要替换多个元素呢
回复 使用道具 举报
好吧好吧好吧
回复 使用道具 举报
聪明的楼主,粉你
回复 使用道具 举报
wyd1 中级黑马 2015-8-22 22:57:12
7#
实际开发中不会用到
回复 使用道具 举报
Hi_about... 发表于 2015-8-19 11:52
理解 理解 这样的确可以实现

{:2_30:}重在理解
回复 使用道具 举报
liuch111 发表于 2015-8-18 22:29
为什么  hashSet.remove(student2);
删除的是 ddd对象 而不是fff对象呢?

就是走了捷径,所以效率高
回复 使用道具 举报
本帖最后由 费世福 于 2015-8-18 22:40 编辑
liuch111 发表于 2015-8-18 22:29
为什么  hashSet.remove(student2);
删除的是 ddd对象 而不是fff对象呢?

删除的时候,hashcode算出来的结果是HashSet中要被删除的ddd元素,所以删除的是ddd,而不是fff
回复 使用道具 举报
为什么  hashSet.remove(student2);
删除的是 ddd对象 而不是fff对象呢?

看了几遍还是没懂!

评分

参与人数 1黑马币 +2 收起 理由
费世福 + 2

查看全部评分

回复 使用道具 举报
这样的操作,可以避免了HashSet的效率低的特点哦
回复 使用道具 举报
理解 理解 这样的确可以实现{:2_44:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马