如何选择数据结构

Java Collections Framework获得了Jolt大奖。学名是集合框架。也有人叫容器。实际上就是一些常用数据结构的实现。

●实际上只有三种容器:Map、List、Set
  1.Hashtable、Vector等是过去遗留下来的类,目的是为了兼容旧的系统,我们现在不要再使用它们。遗留类和现在新的集合框架类唯一的区别是前者(Hashtable,Vector等)是线程安全的,后者(Map,List,Set等)不是线程安全的。在多线程环境下(涉及到并发访问时)当然要线程安全集合类了,这时候我们仍然可以不需要使用旧的集合类,

在Collections中有相应的方法返回同步的Collection对象。如:
public static Collection synchronizedCollection(Collecton c)
public static List synchronizedList(List list)

等等。

●这些接口具有众多的实现,该如何选择数据结构呢?

 

●对List(列表)实现的选择(可选:数组、ArrayList或LinkedList)
    1.假如你不需要可变容量的功能,首选数组(数组比所有容器都快)。
    2.一般情况下,如果没有特别需要,首选ArrayList---遍历速度很快(实际上是线性表中的顺序表)。
 3.假如你经常需要往List的中间插入或删除数据,则首选LinkedList(实际上是线性表中的链表)。

 

●对Set(集合)实现的选择(HashSet,TreeSet,LinkedHashSet)
    1.如果没什么特别需要,首选HashSet---添加和查询速度很快     
    2.如果需要排序,选择TreeSet(有原生排序,有特殊需求,可实现自己的排序器)
    3.LinkedHashSet---遍历更快

 

●对Map实现的选择(类似Set的选择) 
    1.首选HashMap
    2.需要排序选择TreeMap
    3.LinkedHashMap--遍历更快


●最佳实践
   1.Effective Java第43条建议:返回零长度的数组或者集合,而不是null。
  在Collections类中分别有Collections.emptySet(),Collections.emptyList(),Collections.emptyMap()等方法。见名知义,从方法名我们可以知道它们返回的是一个不可变的空集全。正合我意。
 同理,在需要返回数组的方法中,我们尽量避免返回null,而是返回长度为零的数组。如:
    Person[] getAllPerson(){
        if(length==0){
           return new Person[0];
        }
    }
   你可能会有不必要的担心:null返回值比零长度数组更好,因为它避免了分配数组所需要的开销。但实际上这种观点是站不住脚的,具体原因在此不赘述。有兴趣可参看Effective Java。


  2.使用集合框架类时,使用泛型。

 

  3.要使用Map,List,Set等作为类型声明或返回值,而不是使用具体类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值