JavaSE 集合 List

JavaSE 集合 List

标签(空格分隔): JavaSE List


Collection

在这里插入图片描述

  • 常用API

     add() 添加
     	boolean add(E e)  
     	boolean addAll(Collection<? extends E> c)  
     void clear() 清空元素
     int size() 返回大小
     boolean contains(Object obj) 是否包含	//判断对象默认调用equals方法
     boolean isempty() 是否为空
     remove() 删除 
     	boolean remove(Object o)  删除第一个元素
     	boolean removeAll(Collection<?> c) 
     	boolean retainAll(Collection<?> c)  只保留c中有的元素
     Object[] toArray() 转换为数组
    

Collection 接口的的方法是不带有索引的

List

  • List特点
    顺序表 有序 有索引 接口

  • 常用API 与 collection相比多索引

      void add(int index, E element) //指定插入位置,顺移
      boolean addAll(int index, Collection<? extends E> c)  
      E remove(int index) 
      E get(int index)  
      E set(int index, E element)  
      boolean contains(Object o)  
      boolean containsAll(Collection<?> c) 
      List<E> subList(int fromIndex, int toIndex)  
      	子列表和父列表公用一个空间
      	如果不想修改父列表重新new 一个列表参数传入
      	new ArrayList(List list);		
    

ArrayList

  • 底层
    基于数组存储数据
    计算容器的大小,重新new一个新的数组大小,并将当前的数组所有元素复制到这个新的数组中,然后将最新的值放入数组的最后一个。
  • 实现接口
    RandomAccess
  • 查询效率高 插入删除效率低
  • 自定义MyArrayList实现List接口
package se01.day04;

import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
 * ArrayList底层是数组
 * @author Bonnie
 *
 */
public class MyArrayList implements List {
	private Object[] elements;// 集合中存放元素的数组
	
	public MyArrayList() {
		// 数组初始长度为0
		elements = new Object[0];
	}
	/** List中的元素个数 */
	public int size() {
		return elements.length;
	}
	/** 集合是否为空 */
	public boolean isEmpty() {
		return elements.length == 0;
	}
	/** 是否包含指定元素 */
	public boolean contains(Object o) {
		// 循环数组中的每一个元素并和o比较
		/*for (int i = 0; i < size(); i++) {
			if (elements[i].equals(o)) {
				return true;
			}
		}
		return false;*/
		return indexOf(o) != -1;
	}
	/** 向集合末尾追加元素e */
	public boolean add(Object e) {
		/*// 1.扩容
		elements = Arrays.copyOf(elements, elements.length + 1);
		// 2.将e放入新数组最后一位
		elements[elements.length - 1] = e;*/
		add(size(), e);
		return true;
	}
	/** 从集合中删除第一个o元素 */
	public boolean remove(Object o) {
		// 1.判断有没有o
		int index = indexOf(o);
		if (index == -1) {
			return false;
		}
		// 2.将o后面的元素向前移一位 i位元素
		for (int i = index; i < size() - 1; i++) {
			elements[i] = elements[i + 1];
		}
		// 3.将数组缩容
		elements = Arrays.copyOf(elements, size() - 1);
		return true;
	}
	/** 清空集合 */
	public void clear() {
		elements = new Object[0];
	}
	/** 获取index位置上的元素*/
	public Object get(int index) {
		return elements[index];
	}
	/** 将index位置上的元素替换为element,并返回被替换掉的元素 */
	public Object set(int index, Object element) {
		Object o = elements[index];
		elements[index] = element;
		return o;
	}
	/** 在index位置插入element */
	public void add(int index, Object element) {
		// 0.判断index合法性  0 <= index <= size
		if(index < 0 || index > size()) {
			return;
		}
		// 1.扩容
		elements = Arrays.copyOf(elements, size() + 1);
		// 2.将index后面的内容后移一位
		for (int i = size() - 2; i >= index; i--) {
			elements[i + 1] = elements[i];
		}
		// 3.将element放入index位置
		elements[index] = element;
	}
	/** 将index位置上的元素移除,并返回被删除的元素 */
	public Object remove(int index) {
		Object o = elements[index];
		remove(get(index));
		return o;
	}
	/** 获得第一个o元素出现的位置,如果没有o返回-1 */
	public int indexOf(Object o) {
		for (int i = 0; i < size(); i++) {
			if (elements[i].equals(o)) {
				return i;
			}
		}
		return -1;
	}
	public String toString() {
		return Arrays.toString(elements);
	}
	public Iterator iterator() {
		return null;
	}
	public Object[] toArray() {
		return null;
	}
	public Object[] toArray(Object[] a) {
		return null;
	}
	
	public boolean containsAll(Collection c) {
		return false;
	}
	public boolean addAll(Collection c) {
		return false;
	}
	public boolean addAll(int index, Collection c) {
		return false;
	}
	public boolean removeAll(Collection c) {
		return false;
	}
	public boolean retainAll(Collection c) {
		return false;
	}
	
	public int lastIndexOf(Object o) {
		return 0;
	}
	public ListIterator listIterator() {
		return null;
	}
	public ListIterator listIterator(int index) {
		return null;
	}
	public List subList(int fromIndex, int toIndex) {
		return null;
	}

}

LinkedList

  • 双向链表 实现接口 Deque , Queue
    元素称之为节点
  • 查询效率低 插入删除效率高
  • 与比List多的API 应为是双端列表所以有着First 和Last的方法
    void addFirst(E e)
    void addLast(E e)
    E getFirst()
    E getLast()

Vector

使用(不用)线程安全 效率低
使用方法和ArrayList相似

List图解比较

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值