java classcastexception 哈希表中的对象只能是同一类型的

本文通过一个具体的Java示例,展示了在使用哈希表时,加入不同类型的对象会导致ClassCastException异常的问题。文章深入探讨了如何正确实现自定义类的hashCode和equals方法,并确保哈希表中所有元素为同一类型的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下的错误例子,看清了哈希表中的对象只能是同一类型的,否则会抛出classcastexception

import java.util.*;

class HashSetTest
{
 public static void main(String [] args)
 {
  HashSet hs = new HashSet();
  hs.add("one");
  hs.add("two");
  hs.add("three");
  hs.add("one");
  hs.add("one");
  

  
  hs.add(new MyStudent(1,"one"));
  hs.add(new MyStudent(1,"one"));
  hs.add(new MyStudent(1,"one"));
  hs.add(new MyStudent(1,"one"));
  
  Iterator it = hs.iterator();
  while(it.hasNext())
  {
   System.out.println(it.next());
  }
  
  
 }
}

class MyStudent
{
 int num;
 String name;
 
 MyStudent(int num,String name)
 {
  this.num = num;
  this.name = name;
 }
 
 public int hashCode()
 {
  return num*name.hashCode();
 }
 
 public boolean equals(Object o)
 {
  
  MyStudent s = (MyStudent)o;
  return num == s.num && name.equals(s.name);
 }
 
 public String toString()
 {
  return num+","+name;
 }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值