Space Rocker
Space Rocker

Reputation: 787

Efficient implementation of large lookup values in Java

I have this list of TCP/UDP port numbers and their string description:

http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

now this is in the form of an HashMap with portnumber as the key and string description as the value. it might not be so big but i have to lookup for port description in real time when the packets are coming and as you can imagine, this requires efficient retrieval otherwise it slows down the processing considerably.

Initially i thought of implementing huge switch case/break logic or if, else if but that sounded too shabby so i came up with this hashMap.

Now i want to know does Java has something like caching mechanism to speed up if the queries are always the same? like mostly the queried ports will be 80, 443, 23, 22 etc and rarely other services type packets might arrive.

My Options:

Please suggest.

Upvotes: 1

Views: 291

Answers (3)

Peter Lawrey
Peter Lawrey

Reputation: 533492

it slows down the processing considerably.

A lookup of a HashMap typically takes about 50 ns. Given reading from a socket with data typically takes 10,000 - 20,000 ns, I suspect this isn't the problem you think it is.

If you want really fast lookup use an array as this can be faster.

String[] portToName = new String[65536];

Upvotes: 4

Tudor Vintilescu
Tudor Vintilescu

Reputation: 1460

The HashMap has a guaranteed O(1) access time for get operations. The way you're doing it right now is perfect from any point of view.

Maintaining an if/else if structure would be error prone and useless in terms of speedup (for a large list it would actually be worse, with an O(n) asympt time).

Upvotes: 2

Brian Agnew
Brian Agnew

Reputation: 272257

Have you measured how long this takes ? I suspect that a lookup in a hash map with a reasonable number of buckets is going to be negligible compared to whatever else you're doing.

As always with these sort of questions, it's well worth measuring the supposed performance issue before working on it. Premature optimisation is the root of all evil, as they say.

Upvotes: 4

Related Questions