java基础-学到java集合框架中对那个复写equals的疑问,求解答

问题描述

学到java集合框架中对那个复写equals的疑问,求解答

import java.util.*;
class Student implements Comparable
{
private String name;
private int age;
Student(String name,int age)
{
this.name = name;
this.age = age;
}
public int compareTo(Student s)
{
int num = new Integer(this.age).compareTo(new Integer (s.age));
if(num==0)
return this.name.compareTo(s.name);
return num;
}

public int hashCode()
{
    return name.hashCode()+age*34;
}
public boolean equals(Object obj)
{
    if(!(obj instanceof Student))
        throw new ClassCastException("类型不匹配");

    Student s = (Student)obj;
    return this.name.equals(s.name) && this.age==s.age;//这里可不可以写成 return this.name == s.name &&this.age==s.age;
}

public String getName()
{
    return name;
}
public int getAge()
{
    return age;
}

public String toString()
{
    return name+":"+age;
}

}

class MapTest
{
public static void main(String[] args)
{
HashMap hm = new HashMap();

    hm.put(new Student("lisi1",21),"beijing");
    hm.put(new Student("lisi2",22),"shanghai");
    hm.put(new Student("lisi3",23),"nanjign");
    hm.put(new Student("lisi4",24),"wuhan");
    hm.put(new Student("lisi5",25),"changsha");

    //第一种取出方式 keySet
    System.out.println("第一种方式");
    Set<Student> keySet = hm.keySet();

    Iterator<Student> it = keySet.iterator();
    while(it.hasNext())
    {
        Student stu = it.next();

        String addr = hm.get(stu);
        System.out.println(stu+".."+addr);
    }

    System.out.println("第二种方式");
    //第二种取出方式
    Set<Map.Entry<Student,String>> entrySet = hm.entrySet();
    Iterator<Map.Entry<Student,String>> it1 = entrySet.iterator();
    while(it1.hasNext())
    {
        Map.Entry<Student,String> me = it1.next();
        Student stu = me.getKey();
        String addr = me.getValue();
        System.out.println(stu+"..."+addr);
    }
}

}

//Student类中复写equals方法 比较名字的时候可不可以把equals换成==呢??

解决方案

String是一个对象,==表示是两个对象是同一个对象,指向同一块内存地址,A.equals(B)表示A的值和B的值相同即可,两者表示的含义不同,所以我认为这里不能换成==

解决方案二:

一个是地址比较,一个是值比较

时间: 2024-12-02 15:32:47

java基础-学到java集合框架中对那个复写equals的疑问,求解答的相关文章

java基础高手看这里了,这几道基础性的面试题求解答。

问题描述 java基础高手看这里了,这几道基础性的面试题求解答. 同学出去应聘,笔试的时候遇到这几道基础题不会做,拿给我看,发现自己也不怎么会,java基础好多都有些忘了,来帮忙解答一下吧. 1.实现一个函数,函数有一个形参,类型为整数,功能是将形参的十进制数的二进制序列打印到控制台上. 2.实现一个函数,函数有一个形参,类型为集合,功能是将集合中的内容按照每行3个输出(写出两种以上方法). 3.有数据表,字段定义为如下: 客户 商品 报价 报价日期 表中存放着不同客户,不同商品,不同日期的报价

java类的问题-java基础高手看这里了,这几道基础性的面试题求解答。

问题描述 java基础高手看这里了,这几道基础性的面试题求解答. 编制父类Shape:包括普通成员变量图形的行数.列数:图形开始绘制的列数:静态变量图形个数:以及方法绘制图形: 编写两个子类:菱形和矩形,这两个子类继承父类中的绘制图形方法,即在控制台中输出菱形或矩形(根据构造函数中给出的行.列): 验证上述要求,使得屏幕上显示多个图形,并且输出图形的个数. 解决方案 你应该先贴出你的代码,有问题的话大家讨论,直接让人做题不好吧. 解决方案二: abstract class Shape { pub

Java编程那些事儿80——集合框架简述

9.6.3 集合框架简述 在JDK API中专门设计了一组类,这组类的功能就是实现各种各样方式的数据存储,这样一组专门用来存储其它对象的类,一般被称为对象容器类,简称容器类,这组类和接口的设计结构也被统称为集合框架(Collection Framework). 这组类和接口都包含在java.util包中. 为了使整个集合框架中的类便于使用,在设计集合框架时大量的使用接口,实际实现的功能类实现对应的接口,这样可以保证各个集合类的使用方式保持统一. 在集合框架中,提供的存储方式共有两种: 1.按照索

java-日志文件中多次出现JVMDUMP032I JVMms.......,求解答

问题描述 日志文件中多次出现JVMDUMP032I JVMms.......,求解答 Jan 4 15:19:40 localhost IBM Java[2433]: JVMDUMP032I JVM requested Snap dump using '/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/Snap.20150104.151940.2433.0007.trc' in response to an event Jan 4 15:19:40 l

printf-c语言中阶乘的一个小问题,求解答

问题描述 c语言中阶乘的一个小问题,求解答 #include #include #include #include int main() { const int MODE=1000000; int s=0; int i,j,n; scanf("%d",&n); for(i=1;i<=n;i++) { int factorial=1; for(j=1;j<=i;j++) factorial=(factorial*j%MODE); s=(s+factorial)%MOD

我的程序哪里错了?-shell中程序调试问题 不知道哪错了 求解答

问题描述 shell中程序调试问题 不知道哪错了 求解答 #!/bin/bashfunction a {read -p ""input: "" valueecho -n ""doubling the value ""return $[ $value * 2 ]} aecho ""the new value is $?"" 我想让输入的数的两倍大于255时,程序输出的值为1如果我输入的数的

c++-初级 C++ 学习者来求教,编程中排序题目遇到的问题,求解答

问题描述 初级 C++ 学习者来求教,编程中排序题目遇到的问题,求解答 题目是用选择法对10个整数进行由小到大排序. 我的编程是: #include using namespace std; int main() { void select_sort(int array[], int n); int a[10], i; cout << "输入原始数组:" << endl; for (i = 0; i < 10; i++) cin >> a[i]

java集合框架中List的定义及注意事项

大家知道,集合框架是为了表示和操作集合而规定的一种统一的标准的体系结构,学习集合知识有利于我们解决一系列例如保存数据与对象的问题. 常用的集合在系统中定义了两大接口,List和Set 这里我们就来讨论一下List 的定义以及一些常见的问题 List定义的是有序的并且数据可以重复的集合,我们先看一下下面这段代码: import java.util.ArrayList; import java.util.List; publicclass ListTest{ publicstaticvoid mai

java基础学完然后学啥

问题描述 我大一结束学了点java基础,现在在家放暑假,我想请教一下学完基础学些啥. 解决方案 解决方案二:jsp.servlet.jdbc.database.strut1/2[源码].spring[源码].hibernate/ibatis[源码].框架整合(例如ssi/ssh).webservice.redis等内存数据库.大数据量.并发/多线程.分布式.云技术........................慢慢来吧,不着急.还有js相关的知识及框架解决方案三:大学...里面敲代码的时间不是很