Hash Table or map implementation
Well, there's a lott to say:


K and V are the traditional template-arguments for keys and values in C++.
Why do you use J and K respectively KEY and VALUE instead?
List::Node is only instantiated at one place, where all three members are set. Why then does it have a constructor at all, and one setting the last one to nullptr at that?
Default copy- and move- construction and assignment are completely unsuited to your List, as it owns its nodes. Leaving them leads to double-deletes and abandoned nodes. Look at the rule of three.

Also worth a look are inclass-initializers (for head).
deleteNode looks more like reset, and should zero head or be inlined into the destructor. As-is, it leaves head dangling...
The same comments apply to copying / moving / assigning myHash as to List.
The myHash dtor leaks the array of buckets...
contains should return the condition directly, instead of putting it into an if-clause. if(somebool) return true; else return false; is a bit wordy.
Your traverse-functions would be more appropriately named dump or some such... Anyway, why don't you overload operator&gt;&gt;(std::ostream, yourtypehere) instead?
Your hash-function runs afool of the fact that only the type itself can know which parts are relevant and how to hash them. Take a look at the design of std::hash.
Next, I would suggest embracing auto, see Almost Always Auto.