Java 存储子网以将Ip地址与子网匹配的最佳数据结构

Java 存储子网以将Ip地址与子网匹配的最佳数据结构,java,networking,data-structures,network-programming,subnet,Java,Networking,Data Structures,Network Programming,Subnet,我有一个记录列表,每个记录中有以下字段 <Network address of subnet, subnet mask, Object>. 。 对于每个传入的数据包,我必须读取客户端地址,并将其与每个子网掩码一起读取,以确定它属于哪个子网(从我的列表中),并返回相应的对象 目前,我使用HashMap和网络地址作为存储记录的密钥。但问题是,如果一个Ip地址属于表中的多个子网,那么我必须选择一个具有最大CIDR前缀(最小子网)的子网,并且不能使用任何其他子网 例如,我有以下两项记录

我有一个记录列表,每个记录中有以下字段

<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数据结构来完成这个任务吗?

当你说列表时,我假设你指的是地图。树形地图怎么样?
请注意,自定义比较器将用于设置所需迭代顺序的样式

是的。。我选择了带有自定义比较器的TreeMap。谢谢