Java泛型数据结构Map和List

来源:互联网 发布:淘宝客app手机能管理嘛 编辑:程序博客网 时间:2024/06/05 20:59

Java泛型

Java中常用的数据结构,Map、List、Set。
Map<k, v>List<T>来说,Map是以键值对key-value结构存储的集合,List是对象的列表。

Map

Map是一个接口,所以不能直接 new Map。
HashMap是Map的一个实现类,所以可以new HashMap。
常见的用法是:

Map<String, Integer> map = new HashMap<String, Integer>();

常见的Map实现类还有Hashtable。

HashMap

public class HashMap<K,V>    extends AbstractMap<K,V>    implements Map<K,V>, Cloneable, Serializable

Hashtable

public class Hashtable<K,V>    extends Dictionary<K,V>    implements Map<K,V>, Cloneable, java.io.Serializable

HashMap与Hashtable的比较

  1. 二者都实现了Map接口、Cloneable、Serializable接口,不同的是Hashtable继承自老旧的Dictionary类,HashMap继承自AbstractMap
  2. Hashtable是同步的,HashMap是非同步的。也就是说Hashtable是线程安全的,HashMap不是线程安全的。同步和线程安全指的是在多线程同时操作同一个Hashtable的时候,可以保证里面的数据是一致的。而HashMap则需要在在程序中自己来做同步。不过自Java 1.5之后,java提供了同步的HashMap,java.util.concurrent.ConcurrentHashMap
  3. Hashtable可以使用Iterator和Enumeration来循环, HashMap只能使用Iterator循环
  4. Hashtable不允许为null的key和value,HashMap允许有一个key为null,允许有多个value为null。 >所以HashMap不能使用get(key)是否为null来判断是否存在某个key,应该使用containsKey(key)来判断。
  5. HashMap的size始终是2的次方,Hashtable的扩容方式是现有容量乘以2+1。

HashMap和Hashtable的衍生类

HashMap和Hashtable都是无序的,HashMap有一个之类LinkedHashMap,是有序的。
Hashtable最常见的之类是Properties

List

List是一个接口,继承自Collection。

public interface List<E> extends Collection<E>

由于List是个接口,所以不能直接 new List。

ArrayList

ArrayList是List的一个实现类,所以可以new ArrayList。用法如下:

List<String> list = new ArrayList<String>();

ArrayList的定义是这样的:

public class ArrayList<E> extends AbstractList<E>        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
  • ArrayList是无序的;
  • ArrayList允许重复;

Set

Set也是一个接口,继承自Collection

public interface Set<E> extends Collection<E>
  • Set不允许重复。
  • Set是无序的。

阅读理解

0 0
原创粉丝点击