其他分享
首页 > 其他分享> > 集合框架2----List实现类(ArrayList、vector、LinkedList)

集合框架2----List实现类(ArrayList、vector、LinkedList)

作者:互联网

List实现类

 

 

 

ArrayList:

    ### 源码分析:

DEFAULT_CAPACITY=10;默认容量(注意:如果没有向集合中添加任何元素,容量为0,添加一个元素之后,容量为10),每次扩容大小是原来的1.5倍。

elementData:存放元素的数组

size:实际大小

add():添加元素,代码如下:

public boolean add(E e) {
       ensureCapacityInternal(size + 1);  // Increments modCount!!
       elementData[size++] = e;
       return true;
  }

private void ensureCapacityInternal(int minCapacity) {
       ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
  }


private static int calculateCapacity(Object[] elementData, int minCapacity) {
       if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {//elementData 和 DEFAULTCAPACITY_EMPTY_ELEMENTDATA初始都为0
           return Math.max(DEFAULT_CAPACITY, minCapacity);//DEFAULT_CAPACITY初始为10
      }
       return minCapacity;//minCapacity为10
  }


private void ensureExplicitCapacity(int minCapacity) {
       modCount++;

       // overflow-conscious code
       if (minCapacity - elementData.length > 0)//10-0大于0,执行grow();
           grow(minCapacity);
  }

private void grow(int minCapacity) {
       // overflow-conscious code
       int oldCapacity = elementData.length;//0
       int newCapacity = oldCapacity + (oldCapacity >> 1);//0
       if (newCapacity - minCapacity < 0)//-10
           newCapacity = minCapacity;
       if (newCapacity - MAX_ARRAY_SIZE > 0)// MAX_ARRAY_SIZE特别大,所以为负数,不成立
           newCapacity = hugeCapacity(minCapacity);
       // minCapacity is usually close to size, so this is a win:
       elementData = Arrays.copyOf(elementData, newCapacity);//将10赋给elementData
  }

 

vector:

vector使用较少,一般是作为面试题,只做了解就好。

方法与ArrayList类似,只不过它有一个特有遍历方法(使用枚举器),代码如下:

import java.util.Enumeration;
import java.util.Vector;

public class Demo1 {
   public static void main(String[] args) {
       //使用枚举器进行遍历
       Vector vector = new Vector<>();
       //随意添加两个数据
       vector.add("菜名");
       vector.add("小女");
       Enumeration elements = vector.elements();
       while (elements.hasMoreElements()){
           String  o = (String) elements.nextElement();
           System.out.println(o);
      }
  }
}

LinkedList:

import java.util.LinkedList;

public class Demo {
   public static void main(String[] args) {
       LinkedList linkedList = new LinkedList();
       Student s1 = new Student("小明",11,1);
       Student s2 = new Student("小红",12,2);
       Student s3 = new Student("小李",13,3);
       linkedList.add(s1);
       linkedList.add(s2);
       linkedList.add(s3);

       System.out.println("删除之前:"+linkedList.size());
       System.out.println(linkedList.toString());

       linkedList.remove(0);
       System.out.println("删除之后:"+linkedList.size());

       //3.遍历
       //3.1 普通for循环,与ArrayList()基本相同,代码略
       //3.2 增强for循环,与ArrayList()基本相同,代码略
       //3.3 使用迭代器,与ArrayList()基本相同,代码略
       //3.4 使用列表迭代器,与ArrayList()基本相同,代码略

       //4.判断,与ArrayList()基本相同,代码略

       //5.获取
       System.out.println(linkedList.indexOf(s2));
  }
}

ArrayList与LinkedList的区别:

ArrayList:必须开辟连续空间,查询快,增删慢;

LinkedList:无需开辟连续空间,查询慢,增删快;

标签:vector,LinkedList,ArrayList,elementData,List,add,minCapacity,linkedList
来源: https://www.cnblogs.com/mokuiran/p/16585118.html