like stargazer pointed out an abstraction class with two data structures is one way to do it. however there are some considerations.
when you pop a value would you also have its key? if not then removing it from the hashmap will be a tough operation (not O(1)). maybe its worth keeping every objects key in that object if this will be the primary mode of getting data out.
when you remove a value from the table you also have to remove it from the list. maybe its worth keeping that objects ListNode in the object for an O(1) removal from the stack/queue.
if one method of removal is gonna dominate, it might be easy to take one of the above penalties.
for instance if you would not remove things by key (ala hashmap) and only pop (ala stack/queue), and the key is easily computable from the object, (p1) is not much of a penalty and the abstraction approach works.
if the hashmap method of removal is gonna really dominate, it might be worth it to sort the stack by hashkey, and then binary search and then remove it from the stack/queue.
if you want the hashmap to store everything (never removes data), but keep a separate queue/stack for processing (only that removes data) then abstraction is gonna be perfect.
however if none of these are the case, and you cant change the object (to force it to implement your caching scheme), that would imply you have to cache both of those values yourself (object key, and listnode). which introduces a third data structure to your abstraction class. at this point you have to ask yourself if its worth it with this abstraction approach? in those situations where data will be removed both ways equally (or unpredictably) then its worth doing something prerolled, ala jorg mittag. those implementations i believe are straight hashmaps, but each hashnode also has a prev and next link like a list, and the hashmap itself has a tail and head. (for stack/queue like pops/pushes)
basically it comes down to how you are gonna use this data structure. no algorithm is can be viewed as the best strategy, without a breakdown of how all the methods will be called, the use cases.