Here are the answers I've gotten from a bit of (hopefully correct) research:
Both provide the same degree of synchronization. If you were to wrap
HashTableHashtablethrough Collections.synchronized you would have the same degree, but with another redundant layer, of synchronization.The main difference between
HashTableHashtableandCollections.synchronizedMap(HashMap)exist more at the API level. BecauseHashTableHashtableis part of Java's legacy code, you'll see that theHashTableHashtableAPI is enhanced to implement the MapMapinterface, to become part of Java's collections framework. This means that if you were to wrapHashTableHashtablethroughCollections.synchronizedMap(), the API of the wrappedHashTableHashtablewould become limited to the MapMapAPI. So if the API ofHashTableHashtableis encompassed in your definition of behavior, then it is obviously altered/limited.