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, 下载次数: 8)

HashSet修改元素.png

最佳答案

查看完整内容

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

点评

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

15 个回复

倒序浏览
怎么没人关注呢{:2_42:}
回复 使用道具 举报
理解 理解 这样的确可以实现{:2_44:}
回复 使用道具 举报
这样的操作,可以避免了HashSet的效率低的特点哦
回复 使用道具 举报
为什么  hashSet.remove(student2);
删除的是 ddd对象 而不是fff对象呢?

看了几遍还是没懂!

评分

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

查看全部评分

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

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

就是走了捷径,所以效率高
回复 使用道具 举报
Hi_about... 发表于 2015-8-19 11:52
理解 理解 这样的确可以实现

{:2_30:}重在理解
回复 使用道具 举报
wyd1 中级黑马 2015-8-22 22:57:12
9#
实际开发中不会用到
回复 使用道具 举报
聪明的楼主,粉你
回复 使用道具 举报
好吧好吧好吧
回复 使用道具 举报
如果要替换多个元素呢
回复 使用道具 举报
哦哦,再看一遍明白了,谢谢楼主
回复 使用道具 举报
好长的代码!头晕了
回复 使用道具 举报
呵呵 看清楚了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马