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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈忠 中级黑马   /  2012-4-26 20:26  /  2403 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈忠 于 2012-4-26 20:57 编辑

import java.util.ArrayList;
import java.util.List;


public class TestCollection {
        public static void main(String[] args){
                 List<Name> list = new ArrayList<Name>();
                 
                 Name name = new Name("aa","nbb");
                 
                 list.add(new Name("zhang","san"));
                 list.add(new Name("li","si"));
                 list.add(new Name("wang","wu"));
                 list.add(name);
                 
                 System.out.println(list.remove(new Name("zhang","san")));//为什么这里输出的是false
                 System.out.println(list.remove(name));//用name的时候就是true
                 System.out.println(list.contains(new Name("wang","wu")));//为什么这里输出的是false
                 System.out.println(list);
        }
}

class Name implements Comparable<Name> {
        private String firstName;
        private String lastName;
        
        public String getFirstName() {
                return firstName;
        }

        public String getLastName() {
                return lastName;
        }

        public Name(String firstName, String lastName) {
                this.firstName = firstName;
                this.lastName = lastName;
        }
        
        public String toString() {
                return firstName+" "+lastName;
        }


        public int compareTo(Name name) {
                int compare = firstName.compareTo(name.firstName);
                return compare!=0?compare:lastName.compareTo(name.lastName);
        }

        public boolean equals(Name name) {
               
                return (firstName.equals(name.firstName))
                                &&(lastName.equals(name.lastName));
        }

        public int hashCode() {
                return firstName.hashCode();
        }
        
        
}

5 个回复

倒序浏览
remove();的返回值
如果列表包含指定的元素,则返回 true
new Name("zhang","san")))和new Name("zhang","san")))是创建了2个对象 并不相等,所以程序认为没有包含指定的元素返回false
2个name是同一个对象,是相等的,返回true
下面也一样

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
chenwei 发表于 2012-4-26 20:40
remove();的返回值
如果列表包含指定的元素,则返回 true
new Name("zhang","san")))和new Name("zhang"," ...

接上述问题     当我定义Name name = new Name("aa","bb");
                                Name nameOne = new Name("aa","bb");
这时name 和nameOne 也应该是指的两个对象。我用name.equals(nameOne),能返回true。该怎么理解啊 ?
回复 使用道具 举报
你name里面的equals方法比较的是2个字符串是否相等,相等的话返回true
跟对象无关,比的是内容
回复 使用道具 举报
你remove的时候集合里还没有你new的那个对象,当然是false了,那个name是你之前new的对象,返回也就理所当然是true了
回复 使用道具 举报
System.out.println(list.remove(new Name("zhang","san")));//你这里删除一个新创建的Name类,怎么可能删除的到呢,它不在集合里               
                 System.out.println(list.remove(name));//name是集合里的对象可以删除
                 System.out.println(list.contains(new Name("wang","wu")));//同上
                 System.out.println(list);

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马