java - 存储子网以将 IP 地址与子网匹配的最佳数据结构

标签 java networking data-structures network-programming subnet

我有一个记录列表,每条记录中都包含以下字段。

<Network address of subnet, subnet mask, Object>. 

对于每个传入的数据包,我必须读取客户端地址,并使用每个子网掩码来找出它属于哪个子网(从我的列表中)并返回相应的对象。

目前我正在使用以网络地址作为键的 HashMap 来存储记录。但问题是,如果一个IP地址属于表中的多个子网,那么我必须选择具有最大CIDR前缀(最小子网)的子网,并且我不能选择任何其他子网。

例如,我有以下两条记录

<128.30.20.0, 255.255.255.0, Object-1>
<128.30.0.0, 255.255.0.0, Object-2>

然后,IP 地址“128.30.20.1”应始终选择第一个记录,因为它是一个比第二个记录更小的网络。 Hashmap 不保证记录的顺序正确。 我的方法是以这样一种方式保存这些记录,即它们始终按较小的网络始终位于开头的顺序排列。

这个记录列表将被传递到其他一些应用程序,其中它们只是迭代列表以找出从 0 位置开始的匹配项。 (他们只是不想在最后进行额外的处理。)

有人可以建议一些java中的数据结构来完成这个任务吗?

最佳答案

当你说列表时,我假设你指的是 map 。树状图怎么样? http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html 请注意,自定义比较器将用于设置所需的迭代顺序。

关于java - 存储子网以将 IP 地址与子网匹配的最佳数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24895270/

相关文章:

r - 如何在 R 中使用 igraph 删除小社区?

python - 找到一对值的最大值并且需要不断重建的最有效的数据结构是什么?

java - 在内存中存储二维表结构的合适数据结构是什么?

c++ - 以每个元素等于两个数字的最小和的方式填充数组,使得

java - 从泛型类返回数组

java - 迷宫寻路,二维数组

java - Java Getter Setter,传递私有(private)变量

networking - 使用 EKS 与 IP 白名单服务通信

网络和 openvpn 不适用于休眠脚本

java - JAX-WS 服务的构造函数未调用