Thread: Cleanup patch: Change from Vector/Hashtable to ArrayList/HashMap

Cleanup patch: Change from Vector/Hashtable to ArrayList/HashMap

From
Mikko Tiihonen
Date:
Hi,

Here are two small cleanup patches.

First one replaces all Vector references with List (usage) and ArrayList (creation).
Second replaces all Hashtable references with Map (usage) and HashMap (creation).

Reasons:
* Theoretically faster since the ArrayList/HashMap are not synchronized
* Using interfaces makes changing of List/Map implementations easier at later time
* Vector/Hashtable were deprecated already in Java 1.2

-Mikko

Mikko Tiihonen wrote:
 > Hi,
 >
 > Here are two small cleanup patches.
 >
 > First one replaces all Vector references with List (usage) and ArrayList
 > (creation).
 > Second replaces all Hashtable references with Map (usage) and HashMap
 > (creation).
 >
 > Reasons:
 > * Theoretically faster since the ArrayList/HashMap are not synchronized
 > * Using interfaces makes changing of List/Map implementations easier at
 > later time
 > * Vector/Hashtable were deprecated already in Java 1.2

My JDK 6 documentation gives no indication that either Vector or Hashtable
as being deprecated. Rather them being retrofitted into the Collectionss
Framework at 1.2. The main difference being that as you said they are
synchronized, which a developer may wish to have for that type of data
structure.

danap.

 >
 > -Mikko

Re: Cleanup patch: Change from Vector/Hashtable to ArrayList/HashMap

From
henk de wit
Date:
> My JDK 6 documentation gives no indication that either Vector or Hashtable
> as being deprecated. Rather them being retrofitted into the Collectionss
> Framework at 1.2. The main difference being that as you said they are
> synchronized, which a developer may wish to have for that type of data
> structure.

They were indeed not officially deprecated as some other things in the JDK are, but they were most definitely 'effectively' deprecated. No programmer in his or her right might has used those structures since.

Re: Cleanup patch: Change from Vector/Hashtable to ArrayList/HashMap

From
Robin Rosenberg
Date:
dmp skrev 2012-05-06 20.03:
> Mikko Tiihonen wrote:
>  > Hi,
>  >
>  > Here are two small cleanup patches.
>  >
>  > First one replaces all Vector references with List (usage) and ArrayList
>  > (creation).
>  > Second replaces all Hashtable references with Map (usage) and HashMap
>  > (creation).
>  >
>  > Reasons:
>  > * Theoretically faster since the ArrayList/HashMap are not synchronized
>  > * Using interfaces makes changing of List/Map implementations easier at
>  > later time
>  > * Vector/Hashtable were deprecated already in Java 1.2
>
> My JDK 6 documentation gives no indication that either Vector or Hashtable
> as being deprecated. Rather them being retrofitted into the Collectionss
> Framework at 1.2. The main difference being that as you said they are
> synchronized, which a developer may wish to have for that type of data
> structure.

They are not deprecated in the "this might go away" sense, but it was discovered
that having self-synchronized collection classes rarely is enough to provide
thread safety, rather synchronization usually has to be handled in a larger
scope than the individual method call. Therefore, if you think Vector makes
your code thread-safe, you need to think again. Even if works it usually a
very expensive way of accomplishing the goal.

-- robin

Re: Cleanup patch: Change from Vector/Hashtable to ArrayList/HashMap

From
Robin Rosenberg
Date:
dmp skrev 2012-05-06 20.03:
> Mikko Tiihonen wrote:
>  > Hi,
>  >
>  > Here are two small cleanup patches.
>  >
>  > First one replaces all Vector references with List (usage) and ArrayList
>  > (creation).
>  > Second replaces all Hashtable references with Map (usage) and HashMap
>  > (creation).
>  >
>  > Reasons:
>  > * Theoretically faster since the ArrayList/HashMap are not synchronized
>  > * Using interfaces makes changing of List/Map implementations easier at
>  > later time
>  > * Vector/Hashtable were deprecated already in Java 1.2
>
> My JDK 6 documentation gives no indication that either Vector or Hashtable
> as being deprecated. Rather them being retrofitted into the Collectionss
> Framework at 1.2. The main difference being that as you said they are
> synchronized, which a developer may wish to have for that type of data
> structure.

They are not deprecated in the "this might go away" sense, but it was discovered
that having self-synchronized collection classes rarely is enough to provide
thread safety, rather synchronization usually has to be handled in a larger
scope than the individual method call. Therefore, if you think Vector makes
your code thread-safe, you need to think again. Even if works it usually a
very expensive way of accomplishing the goal.

-- robin

Fwd: Cleanup patch: Change from Vector/Hashtable to ArrayList/HashMap

From
Luis Flores
Date:
Some old 1.0 'Collections' (namely Vector and HashTable) where marked obsolete, they won't disappear beacause they are too widely used, but they are very inefficient, so they have better alternatives (ArrayList and HashMap), event if you want an synchronized List or Map you should use Collections.synchronized[Collection|Map|List|Set] and not use the old classes.

However same uses of Vector don't work with newer classes, for example, the method set won't work on ArrayList (ArrayList with size 10 and set at position 20, you get Exception, on Vector it works).

So, excluding the example above, it is a good thing to replace Vector by List/ArrayList and Hashtable by Map/HashMap. 
In some case LinkedList is better than ArrayList.

Luis Flores


On Sun, May 6, 2012 at 8:59 PM, Robin Rosenberg <robin.rosenberg@dewire.com> wrote:
dmp skrev 2012-05-06 20.03:

Mikko Tiihonen wrote:
 > Hi,
 >
 > Here are two small cleanup patches.
 >
 > First one replaces all Vector references with List (usage) and ArrayList
 > (creation).
 > Second replaces all Hashtable references with Map (usage) and HashMap
 > (creation).
 >
 > Reasons:
 > * Theoretically faster since the ArrayList/HashMap are not synchronized
 > * Using interfaces makes changing of List/Map implementations easier at
 > later time
 > * Vector/Hashtable were deprecated already in Java 1.2

My JDK 6 documentation gives no indication that either Vector or Hashtable
as being deprecated. Rather them being retrofitted into the Collectionss
Framework at 1.2. The main difference being that as you said they are
synchronized, which a developer may wish to have for that type of data
structure.

They are not deprecated in the "this might go away" sense, but it was discovered
that having self-synchronized collection classes rarely is enough to provide
thread safety, rather synchronization usually has to be handled in a larger
scope than the individual method call. Therefore, if you think Vector makes
your code thread-safe, you need to think again. Even if works it usually a
very expensive way of accomplishing the goal.

-- robin

--
Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-jdbc


Luis Flores wrote:
> So, excluding the example above, it is a good thing to replace Vector by
> List/ArrayList and Hashtable by Map/HashMap.
> In some case LinkedList is better than ArrayList.

Which is exactly why _usage_ of the list should be through the 'List'
interface regardless of the implementation class.

--
Lew
Honi soit qui mal y pense.
http://upload.wikimedia.org/wikipedia/commons/c/cf/Friz.jpg

Re: Cleanup patch: Change from Vector/Hashtable to ArrayList/HashMap

From
Dave Cramer
Date:
On Sun, May 6, 2012 at 12:25 PM, Mikko Tiihonen
<mikko.tiihonen@nitorcreations.com> wrote:
> Hi,
>
> Here are two small cleanup patches.
>
> First one replaces all Vector references with List (usage) and ArrayList
> (creation).
> Second replaces all Hashtable references with Map (usage) and HashMap
> (creation).
>
> Reasons:
> * Theoretically faster since the ArrayList/HashMap are not synchronized
> * Using interfaces makes changing of List/Map implementations easier at
> later time
> * Vector/Hashtable were deprecated already in Java 1.2
>
> -Mikko
>
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc
>

Mikko,

Thanks for the patch it has been applied to master

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca