java数据结构分析

来源:互联网 发布:java购物车实现原理 编辑:程序博客网 时间:2024/06/03 17:50

众所周知,java已经诞生很久了。作为一个java开发人员的我,书写这篇文章旨在为我这只菜鸟更好的认识java。好了,进入正题。

java数据结构,大致可以用此图表示:

Collections--

     --List--

                      --ArrayList

                      --LinkedList

      --Vector--

    --Stack

             --Set--

     --HashSet

     

 Map--

 --HashMap

 --HashTable

即java的数据集合可以分为Collections和Map两大巨头。

在Collections接口下:

List接口和Set接口extends了Collection接口。

ArrayList类和LinkedList类以及Vector类implements了List接口。其中Stack类又extends了Vector类。

HashSet类implements了Set接口

在Map接口下:

HashMap类和HashTable类都实现了Map接口

这就是java下数据集合的一个大致分析。

接下来,我们分析他们各自的使用场景和对数据操作的一些优缺点。

在java中,我们都知道接口是不能直接使用被实例化的。所以对于这些集合的分析我们旨在分析类的使用场景和优缺点。

好了,我们从继承于Collectins接口的List接口下的ArrayList类和LinkedList类来分析:

俗话说,实践是检验真理的唯一标准。我们用程序来比较它们的异同点。

我们分别在ArralyList和LinkedList中插入1百万条数据,我这里创建了一个Student类。

        发现不同点:

    ArrayList插入删除较慢,随机访问(查询)

     LinkedList查询时相对较慢插入删除相对较快。

相同点:

              ArrayList和LinkedList都允许插入重复数据null也可以。都是非同步的,即不是线程安全的。此时Vector是同步的,是线程安全的

原因分析:ArrayList是顺序表,以数组的方式来实现。即可以理解为大小可变的数组。可以用下标快速的访问。但是在插入和删除时元素需要整体移动,所以效率低。

  LinkedList是双向链表,在查询和修改是不需要元素的整体移动。

接下来分析实现了Set接口的HashSet类

        特点:不能插入null,否则报java.lang.NullPointerException异常

    能插重复的数据,但是重复的数据只会被插入一次,HashSet的大小不回变大,即不能插入重复的值


Map接口下的HashMap和Hashtable

相同点:都是以key-value健值对的形式存储数据,都不能包含重复的key。

不同点:由HashMap和Hashtable的size()方法我们就可以知道。HashMap的size()方法没有synchronized修饰,即HashMap没有实现同步,线程是非安全的。

Hashtable的size()用synchronized修饰了,即线程安全。

HashMap的key可以为null,而Hashtable的key不能为null,否则在运行的时候,会报java.lang.NullPointerException异常。


0 0
原创粉丝点击