Java集合之List容器 您所在的位置:网站首页 java创建list集合 Java集合之List容器

Java集合之List容器

2023-07-17 09:39| 来源: 网络整理| 查看: 265

上一篇文章中我们介绍了Collection和迭代器以及遍历集合的几种方式,Collection容器分为以List和Set两大类,这篇文章我们首先介绍一下List及其实现类。

List

List容器中存放的元素是有序且可重复的,主要实现类为ArrayList,LinkedList和Stack,其主要方法如下:

//返回容器中指定位置的对象 E get(int index); //替换指定位置的元素 E set(int index,E e); //向指定位置插入元素 E add(int index,E e); //移除指定位置的元素 E remove(int index); //返回Object对象在容器中第一次出现的位置 int indexOf(Object o); //返回Object对象在容器中的最后出现的位置 int lastIndexOf(Object o); //返回ListIterator引用 ListIterator listIterator(); //返回该容器中从fromIndex到toIndex位置的子集合,对此集合的改变也会修改原本的集合 List subList(int fromIndex,int toIndex); AbstractList

上一篇文章的集合框架图中可以看到除了主要接口和实现类还有几个抽象类,例如AbstracCollection和AbstractList。这两个类分别提供了一些Collection接口和List接口中方法的默认实现,这样子类就可以不用实现接口中的全部方法,只需要实现自己需要实现的方法就可以了,我们在平时的开发中也可以使用这样的抽象类。

ArrayList

ArrayList是最常用的集合之一,底层使用数组实现,但容量大小可以动态变化。因为基于数组的实现,因此随机访问的效率高,插入删除的效率低。

成员变量

//通过维护此数组实现ArrayList的功能 transient Object[] elementData; //集合的元素个数 private int size; //在AbstractList类声明,用于实现快速失败机制 protected transient int modCount = 0;

主要方法

我在这里其实就是在idea里把方法粘贴过来然后加了注释,算是加强记忆吧。

//返回集合元素个数 public int size() { return size; } //返回集合是否为空(即集合元素是否为0) public boolean isEmpty() { return size == 0; } //集合是否包含指定元素 public boolean contains(Object o) { return indexOf(o) >= 0; } //指定元素在集合中第一次出现的索引,不存在则返回-1 public int indexOf(Object o) { if (o == null) { for (int i = 0; i < size; i++) if (elementData[i]==null) return i; } else { for (int i = 0; i < size; i++) if (o.equals(elementData[i])) return i; } return -1; } //指定元素在集合中最后一次出现的索引 public int lastIndexOf(Object o) { if (o == null) { for (int i = size-1; i >= 0; i--) if (elementData[i]==null) return i; } else { for (int i = size-1; i >= 0; i--) if (o.equals(elementData[i])) return i; } return -1; } //转换为Object数组,Arrays工具类在后面介绍 public Object[] toArray() { return Arrays.copyOf(elementData, size); } //转换为指定类型的数组 public T[] toArray(T[] a) { if (a.length < size) return (T[]) Arrays.copyOf(elementData, size, a.getClass()); System.arraycopy(elementData, 0, a, 0, size); if (a.length > size) a[size] = null; return a; } //返回集合指定索引的元素 public E get(int index) { rangeCheck(index); return elementData(index); } //替换指定索引的元素为指定元素 public E set(int index, E element) { rangeCheck(index); E oldValue = elementData(index); elementData[index] = element; return oldValue; } //添加指定元素,添加成功返回true,否则报错 public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; } //向指定索引添加元素 public void add(int index, E element) { rangeCheckForAdd(index); ensureCapacityInternal(size + 1); // Increments modCount!! System.arraycopy(elementData, index, elementData, index + 1,size - index); elementData[index] = element; size++; } //删除指定索引的元素并返回该元素的值 public E remove(int index) { rangeCheck(index); modCount++; E oldValue = elementData(index); int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // clear to let GC do its work return oldValue; } //在集合中移除指定元素,成功返回true,否则返回false public boolean remove(Object o) { if (o == null) { for (int index = 0; index < size; index++) if (elementData[index] == null) { fastRemove(index); return true; } } else { for (int index = 0; index < size; index++) if (o.equals(elementData[index])) { fastRemove(index); return true; } } return false; } //清空集合 public void clear() { modCount++; for (int i = 0; i < size; i++) elementData[i] = null; size = 0; } //向集合中添加另一个集合的元素,返回添加成功的条数 public boolean addAll(Collection


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有