JDK-6454581 : Replace Hashtable usage in Swing with HashMaps, where appropiate
  • Type: Enhancement
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 6
  • Priority: P4
  • Status: Open
  • Resolution: Unresolved
  • OS: solaris_10
  • CPU: x86
  • Submitted: 2006-07-31
  • Updated: 2023-08-31
Related Reports
Relates :  
Relates :  
Relates :  
Description
FULL PRODUCT VERSION :
java version "1.6.0-rc"


A DESCRIPTION OF THE PROBLEM :
I have identified these classes that at the minumum mention Hashtable in their implementation:
javax/swing/AbstractAction.java
javax/swing/ArrayTable.java
javax/swing/DebugGraphicsInfo.java
javax/swing/JComponent.java
javax/swing/JEditorPane.java
javax/swing/JLayeredPane.java
javax/swing/JMenu.java
javax/swing/JPopupMenu.java
javax/swing/JSlider.java
javax/swing/JTable.java
javax/swing/JToolBar.java
javax/swing/JTree.java
javax/swing/KeyboardManager.java
javax/swing/SwingUtilities.java
javax/swing/SystemEventQueueUtilities.java
javax/swing/UIDefaults.java
javax/swing/UIManager.java
javax/swing/plaf/basic/BasicFileChooserUI.java
javax/swing/plaf/basic/BasicTabbedPaneUI.java
javax/swing/plaf/basic/BasicTableUI.java
javax/swing/plaf/basic/BasicTextUI.java
javax/swing/plaf/basic/BasicToolBarUI.java
javax/swing/plaf/basic/BasicTreeUI.java
javax/swing/plaf/synth/SynthTabbedPaneUI.java
javax/swing/text/AbstractDocument.java
javax/swing/text/DefaultStyledDocument.java
javax/swing//text/JTextComponent.java
javax/swing/text/SimpleAttributeSet.java
javax/swing/text/Style.java
javax/swing/text/StyleContext.java
javax/swing/text/TextAction.java
javax/swing/text/TextLayoutStrategy.java
javax/swing/text/html/AccessibleHTML.java
javax/swing/text/html/CSS.java
javax/swing/text/html/HTML.java
javax/swing/text/html/HTMLDocument.java
javax/swing/text/html/MinimalHTMLWriter.java
javax/swing/text/html/StyleSheet.java
javax/swing/text/html/parser/AttributeList.java
javax/swing/text/html/parser/DTD.java
javax/swing/text/html/parser/Element.java
javax/swing/text/html/parser/Entity.java
javax/swing/text/html/parser/Parser.java
javax/swing/text/rtf/RTFAttributes.java
javax/swing/text/rtf/RTFGenerator.java
javax/swing/text/rtf/RTFReader.java
javax/swing/tree/DefaultTreeSelectionModel.java
javax/swing/tree/FixedHeightLayoutCache.java
javax/swing/tree/VariableHeightLayoutCache.java
javax/swing/undo/StateEdit.java
javax/swing/undo/StateEditable.java

Some like AbstractAction import Hashtable but do not use it.  Others like ArrayTable use a Hashtable for its storage.

The reason to convert would be to remove unnecessary synchronization.  Hashtable's methods are synchronized, HashMaps are not.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
read source, find usage

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
use HashMaps instead of Hashtables
ACTUAL -
Hashtables, everywhere!

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
read java source, their there
---------- END SOURCE ----------

Comments
EVALUATION See also 6454582, which is about using ArrayList instead of Vector. See also 6455353, which is about using ArrayDeque instad of Stack. See also 4304287, which is about using Collections in public API.
01-08-2006

EVALUATION Contribution forum : https://jdk-collaboration.dev.java.net/servlets/ProjectForumMessageView?forumID=1463&messageID=14534
01-08-2006