You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java课程项目求助:文本文件数据存入Hashtable失败排查

Troubleshooting Your Hashtable Object Storage Issue

Hey there! Let’s dig into why your Hashtable isn’t holding onto those objects you’re creating—this is a super common pitfall with Java’s legacy Hashtable, so let’s break down the most likely issues step by step:

1. Double-check if you’re using the right key (and handling equals()/hashCode() correctly)

This is the #1 reason entries go missing in hash-based collections like Hashtable. Let’s clarify two scenarios:

  • If you’re using the object’s ID (e.g., String studentId or Integer id) as the Hashtable key:
    You don’t need to override methods on your object class, but make 100% sure the ID you use to put() is identical to the one you use to get(). Tiny mistakes like trailing spaces, case sensitivity (e.g., "STU123" vs "stu123"), or type mismatches (using an Integer ID but searching with a String) will break retrieval.
  • If you’re using the entire object as the Hashtable key:
    You must override both equals() and hashCode() in your object class, basing them on the ID field (since that’s how you want to match entries). Here’s a quick example:
    import java.util.Objects;
    
    public class YourObject {
        private String id;
        // other fields, constructor, getters
    
        @Override
        public int hashCode() {
            return Objects.hash(id); // Tie hash to the ID
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            YourObject that = (YourObject) o;
            return Objects.equals(id, that.id); // Match on ID
        }
    }
    
    Without these overrides, Hashtable uses the default object identity checks, meaning even two objects with the same ID will be treated as different keys.

2. Verify your put() call and Hashtable instance

  • Make sure you’re using the correct syntax for Hashtable.put(): It’s hashtable.put(key, value). For example, if storing a Student object with its ID as the key:
    hashtable.put(student.getId(), student);
    
  • Critical check: Are you accidentally reinitializing the Hashtable after adding entries? For example, if you create a new Hashtable() instance in the method where you read the file, but your search method uses a separate, empty Hashtable instance. Make sure the same Hashtable instance is used for both storage and retrieval (e.g., declare it as a class-level field instead of a local variable).

3. Debug with quick sanity checks

Add these simple print statements to narrow down the issue:

  • Right after calling put(), print the Hashtable size to confirm entries are being added:
    System.out.println("Hashtable size after add: " + hashtable.size());
    
  • When searching, print the exact key you’re using:
    String searchId = "123";
    System.out.println("Searching for ID: '" + searchId + "'"); // Check for hidden spaces/case issues
    
  • Iterate over all entries to see what’s actually stored:
    for (Enumeration<?> keys = hashtable.keys(); keys.hasMoreElements();) {
        Object key = keys.nextElement();
        System.out.println("Stored key: " + key + " | Value: " + hashtable.get(key));
    }
    

One quick side note: Hashtable is a legacy class—if your course allows it, HashMap is a better modern alternative (faster, less restrictive), but all the above checks apply to hash-based collections in general.

内容的提问来源于stack exchange,提问作者jmac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:24:04