• 技术文章 >java >java基础

    Java Vector和ArrayList的异同分析

    小妮浅浅小妮浅浅2021-01-19 10:48:23原创2330

    在线程中有两种常用的方法,能够通过数组实现相应的功能,但除此之外在区别上也是很明显的。本篇就其中的代表方法ArrayList和Vector进行比较分析,一个是非线程安全,另一个是线程安全。在进行相同和不同点的分析之后,带来二者的实例代码对比,帮助大家体会它们的异同。

    1.相同点

    (1)都是有序集合。

    (2)数据不允许重复。

    (3)都实现了list接口。

    (4)都是通过数组实现的。

    (5)数组进行复制、移动、代价比较高,因此,适合随机查询和遍历,不适合插入和删除。

    2.不同点

    1)ArrayList属于线程不安全(线程不同步)即当多线程进行对ArrayList集合的操作时,有可能对数据进行不正确的操作。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些。

    2)Vector是线程安全的(同步线程)即当在同一时刻只能有一个线程进行对Vector集合的操作时,但是Vector要做到线程同步,需要大量的花费,可能消耗大量的内存或者CPU。如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们再去考虑和编写线程安全的代码。

    3)ArrayList在内存不够时默认扩展1.5倍,Vector是默认扩展1倍。

    4)Vector提供indexOf(object,start)接口,ArrayList没有。

    3.实例代码对比

    ArrayList中:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    public boolean add(E e) {

      

        

      

        ensureCapacity(size + 1);  // 增加元素,判断是否能够容纳。不能的话就要新建数组

      

         

      

        elementData[size++] = e;

      

        

      

        return true;

      

        

      

    }

      

        

      

     public void ensureCapacity(int minCapacity) {

      

        

      

        modCount++;

      

        

      

        int oldCapacity = elementData.length;

      

        

      

        if (minCapacity > oldCapacity) {

      

        

      

            Object oldData[] = elementData; // 此行没看出来用处,不知道开发者出于什么考虑

      

         

      

            int newCapacity = (oldCapacity * 3)/2 + 1; // 增加新的数组的大小

      

         

      

            if (newCapacity < minCapacity)

      

        

      

           newCapacity = minCapacity;

      

        

      

                // minCapacity is usually close to size, so this is a win:

      

         

      

                elementData = Arrays.copyOf(elementData, newCapacity);

      

        

      

        }

      

        

      

    }

    Vector中:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    private void ensureCapacityHelper(int minCapacity) {

      

        

      

        int oldCapacity = elementData.length;

      

        

      

        if (minCapacity > oldCapacity) {

      

        

      

            Object[] oldData = elementData;

      

        

      

            int newCapacity = (capacityIncrement > 0) ?

      

        

      

           (oldCapacity + capacityIncrement) : (oldCapacity * 2);

      

        

      

            if (newCapacity < minCapacity) {

      

        

      

           newCapacity = minCapacity;

      

        

      

            }

      

        

      

             elementData = Arrays.copyOf(elementData, newCapacity);

      

        

      

        }

      

        

      

    }

    以上就是Java Vector和ArrayList的异同分析,相信它们的不同之处已经在运行代码后,会直观的体会到了。大家可以根据自己线程安全或效率的需求,在使用的时候进行挑选。

    专题推荐:java vector arraylist
    上一篇:java之json串转Map的整理 下一篇:java中mybatis和hibernate的总结

    相关文章推荐

    • Java中char字节的占用分析• java中int使用十六进制• CompletableFuture在java中的报错处理• java之json串转Map的整理

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网