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

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

时间:2022-08-14 11:59:11浏览次数:96  
标签:vector LinkedList ArrayList elementData List minCapacity 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,minCapacity,linkedList
From: https://www.cnblogs.com/mokuiran/p/16585118.html

相关文章

  • list和tuple的区别:
    list和tuple的区别:list:1、是一种有序的集合,可以随时添加和删除其中元素;2、访问list中的元素,索引从0开始,0为第一个元素,当索引超出范围会报错,索引不能越界,最后一......
  • 关于列表迭代器listIterator.previous();无法输出的问题
    转载:(18条消息)关于listIterator.hasPrevious()为什么跳过执行的解释_干碎那个人的眼镜(指自己)的博客-CSDN博客_hasprevious() ListIteratorlistIterator=list.listI......
  • Java中list集合自定义排序-2022新项目
    一、业务场景为了加快首页数据查询的效率,因此将首页查询的数据大多数都放在了缓存中,包括各种list集合数据。对这些从缓存中获取的数据做了一个兜底处理,如果从缓存中......
  • 一个list分成 list长度/step_length 向上取整个小list集合
    一、具体实现方法/***将一个list按照新的步长分成list长度/step_length向上取整个小list*@paramlist*@paramstep_length*@return*/publicstaticList<Strin......