JAVA数据结构学习

来源:互联网 发布:个体工商户开淘宝 编辑:程序博客网 时间:2024/05/16 19:44
java的数据结构在包java.util中。

主要有三种接口 map list set。

尽量返回接口而非实际类型。这样如果要将返回的ArrayList改为LinkedList,客户端代码不用改变。

常用集合类的继承结构如下: 
Collection<--List<--Vector 
Collection<--List<--ArrayList 
Collection<--List<--LinkedList 
Collection<--Set<--HashSet 
Collection<--Set<--HashSet<--LinkedHashSet 
Collection<--Set<--SortedSet<--TreeSet 
Map<--SortedMap<--TreeMap 
Map<--HashMap 

其中 Collection,List,Set,Map都是接口。

Vector和ArrayList类似数组。LinkedList类似链表。

Set是集合,不能有重复元素。

Map就是key-value。

ArrayList 和Vector 区别:

ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

HashSet和TreeSet选择:

Set既可作为一个ArraySet 实现,亦可作为HashSet 实现。ArraySet 是由一个ArrayList
后推得到的,设计成只支持少量元素,特别适合要求创建和删除大量Set 对象的场合使用。然而,一旦需要
在自己的Set中容纳大量元素,ArraySet 的性能就会大打折扣。写一个需要 Set的程序时,应默认选择
HashSet。而且只有在某些特殊情况下(对性能的提升有迫切的需求),才应切换到 ArraySet。

Map的选择:

当我们使用 Map时,首要的选择应该是 HashMap。只有在极少数情况下才
需要考虑其他方法。








0 0
原创粉丝点击