移动12万号段信息如何快速寻址

面试题如下:

image.png

简易思路

利用 哈希表 迅速寻址的 优点 实现当前需求;(如有疑问欢迎交流)
1889969 - 1340000 = 549969;
比549969大的最小的2的次幂数为:1048576


image.png

大致代码如下

// 实体类封装
class PhoneSegment{
    private Integer id;
    private Integer code;
    private String province;
    private String city;
    private String serverType;
    // get set 略
}

定义数据结构

    // 结合需求 及 HashMap底层hash算法实现原理,初始化一个如下的HashMap
    private static Map<Integer, PhoneSegment> phoneSegmentHashMap = new HashMap<Integer, PhoneSegment>(1048576, 1);

初始化数据到map

    // 程序启动时,加载如下方法
    // 初始化 12万 号段 数据 到hash结构
    public void initData2Map() {
        // 获取 数据库 号段值数据 集合
        List<PhoneSegment> list = getAllPhoneSegmentFromDB();
        // 遍历集合,将数据 put到 phoneSegmentHashMap 中
        phoneSegmentHashMap = list.stream().collect(Collectors.toMap(p -> p.getCode()-1340000, p -> p));
    }
    // 从数据库获取 电话号段信息集合
    public List<PhoneSegment> getAllPhoneSegmentFromDB() {
        // DB读取数据,代码略
        return new ArrayList<>();
    }

根据手机号码获取对应号段信息(高效保证)

    // 根据用户的电话号码 从map中 获取 号段信息
    public PhoneSegment getPhoneSegmentByPhone(String phone) {
        String phoneSegmentCode = phone.substring(0, 7);
        PhoneSegment phoneSegment = phoneSegmentHashMap.get(Integer.valueOf(phoneSegmentCode)-1340000);
        return phoneSegment;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 java8对java7中hashmap的实现进行了一部分修改,最大的修改在于利用了红黑树,jdk7使用数组+...
    今年五年级阅读 2,507评论 0 0
  • HashMap 的Hash算法优化与寻址优化 Hash算法优化:把单纯的Hash算法优化为了高16位与低16位进行...
    wuhuaguo丶阅读 3,122评论 0 1
  • 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memca...
    java雅雅阅读 1,209评论 0 0
  • 30.ISR、OSR、AR 是什么? ISR:In-Sync Replicas 副本同步队列 OSR:Out-of...
    qydong阅读 9,752评论 0 0
  • https://www.cnblogs.com/chengxiao/p/6059914.html 哈希表(hash...
    卷卷_麦芽呀阅读 2,507评论 1 4