6.5 Hashtable类 与 Properties类

本文介绍Hashtable这一高级数据结构,探讨其在快速检索数据方面的应用,并通过示例演示如何存储和检索数据。
  Hashtable也是一种高级数据结构,用以快速检索数据。Hashtable不仅可以像Vector一样动态存储一系列对象,而且对存储的每一个对象(称为值)都要安排另一个对象(称为关键字)与之相关联。例如,我们可以在Hashtable中存储若干个国家的中文和英文名,并且可以通过英文名称检索对应的中文名称,在这种情况中中文就是值,英文就是关键字。

        向Hashtable对象中存储数据,使用的是Hashtable.put(Object key, Object value)方法,从Hashtable中检索数据,使用Hashtable.get(Object key)方法。值和关键字都可以是任何类型的非空对象。

        下面代码生成一个存储数字的Hashtable,用英文数字作为关键字。

        Hashtable numbers = new Hashtabel();

        numbers.put("one", new Integer(1)); 

        numbers.put("two",  new Integer(2)); 

        numbers.put("three", new Integer(3));

        要想检索其中"two"关键字对应的数据,看下面的代码就能明白。

        Integer n = (Integer)numbers.get("two");

        if(n != null) { System.out,println("two = " + n);}

        要想成功地从Hashtable中检索数据,用作关键字的对象必须正确覆盖Object.hashCode方法和Object.equals方法。覆盖Object.equals方法道理不难想象,检索数据时要比较用来检索的关键字是否与存储在Hashtable中的某个关键字相等,如果两个关键字对象不能正确判断是否相等,检索是不可能正确的。Object.hashCode方法回返一个叫散列码的值,这个值是由对象的地址以某种方式转换来的。内容相同的两个对象,既然是两个对象地址就不可能一样,所以Object.hashCode返回的值也不一样。要想两个内容相同的对象的hashCode方法返回一样的散列码,子类必须覆盖Object.hashCode方法,用于关键字的类,如果它的两个对象用equals方法比较相等的,那么这两个对象的hashcode方法返回值也要一样,所以我们也要覆盖hashCode方法。

       这里可以提一下String类,因为String类已按照关键字类的要求覆盖了这两个方法,如果两个String对象内容不相等,它们的hashCode的返回值也不会相等。如果两个String对象的内容相等,它们的hashCode的返回值也相等

注意:StringBuffer类没有按照关键字类的要求覆盖hashCode方法,即使两个StringBuffer类对象的内容相等,但这两个对象的hashCode方法的返回值却不相等。

 

class MyKey{
  private String name;
  private int age;
 
  public MyKey(String name, int age){
    this.name = name;
    this.age = age;
  }
 
  public String toString(){
    return new String(name + ", " + age);
  }
 
  public boolean equals(Object obj){
    if(name.equals(obj.name) && age == obj.age){
      return true;
    }else{
      return false;
    }   
  }
 
  public int hashCode(){
    return name.hashCode() + age;
  }
}

 

import java.util.*;

public class TestHashtable{
  public static void main(String[] args){
    Hashtable numbers = new Hashtable();
    numbers.put(new MyKey("A1", 18), new Integer(1));
    numbers.put(new MyKey("A2", 13), new Integer(2));
    numbers.put(new MyKey("A3", 15), new Integer(3));
    Enumeration e = numbers.keys();
    while(e.hasMoreElements()){
      MyKey key = (MyKey)e.nextElement();
      System.out.println(key.toString() + "=");
      System.out.println(numbers.get(key).toString());
    }
  }
}

本指南详细阐述基于Python编程语言结合OpenCV计算机视觉库构建实时眼部状态分析系统的技术流程。该系统能够准确识别眼部区域,并对眨眼动作持续闭眼状态进行判别。OpenCV作为功能强大的图像处理工具库,配合Python简洁的语法特性丰富的第三方模块支持,为开发此视觉应用提供了理想环境。 在环境配置阶段,除基础Python运行环境外,还需安装OpenCV核心模块dlib机器学习库。dlib库内置的HOG(方向梯度直方图)特征检测算法在面部特征定位方面表现卓越。 技术实现包含以下关键环节: - 面部区域检测:采用预训练的Haar级联分器或HOG特征检测器完成初始人脸定位,为后续眼部分析建立基础坐标系 - 眼部精确定位:基于已识别的人脸区域,运用dlib提供的面部特征点预测模型准确标定双眼位置坐标 - 眼睑轮廓分析:通过OpenCV的轮廓提取算法精确勾勒眼睑边缘形态,为状态判别提供几何特征依据 - 眨眼动作识别:通过连续帧序列分析眼睑开合度变化,建立动态阈值模型判断瞬时闭合动作 - 持续闭眼检测:设定更严格的状态持续时间闭合程度双重标准,准确识别长时间闭眼行为 - 实时处理架构:构建视频流处理管线,通过帧捕获、特征分析、状态判断的循环流程实现实时监控 完整的技术文档应包含模块化代码实现、依赖库安装指引、参数调优指南及常见问题解决方案。示例代码需具备完整的错误处理机制性能优化建议,涵盖图像预处理、光照补偿等实际应用中的关键技术点。 掌握该技术体系不仅有助于深入理解计算机视觉原理,更为疲劳驾驶预警、医疗监护等实际应用场景提供了可靠的技术基础。后续优化方向可包括多模态特征融合、深度学习模型集成等进阶研究领域。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值