I would use two different collection-type objects to store references to the Articles, one for order by rank, and one for looking up by db id number. This may seem wasteful, but remember that each collection doesn't really store all the articles inside it - just a reference to each one. So if you have 1000 articles, you will have 1000 Article objects, and two collections containing a total of 2000 references to the Articles. (Not 2000 Article objects.)
For the rank attribute, it seems you need to maintain an order for iteration, but don't really need to look up by rank, so a List (ArrayList or LinkedList) might be best. If you need to look up by rank as well as keep articles in order, a TreeMap might be best. (Also good if you are adding and removing articles frequently - you don't need to re-sort the whole tree for each change.)
For the db id attribute, a HashMap is probably the best bet, as it generally offers the fastest lookup for larger collections - but it doesn't maintain order for iteration.
Naturally, the best choice for each collection will depend on how you use it. How often do you perform each type of operation, and which operations are most time-critical. Thomas Paul has written several good articles about this for our
newsletter - check out
this one in particular. Remember that the performance numbers can vary substantially depending on your application and environment, so what looks best on paper may not turn out to be best in practice -
test for yourself.