集合框架(二)

List集合

特点、特有方法

  • List集合因为支持索引,所以多了很多于索引相关的方法,当然,Collection的功能List也都继承了。
方法名称 说明
void add(int index,E element) 在此集合中的指定位置插入指定的元素
E remove(int index) 删除指定索引处的元素,返回被删除的元素

E set(int index,E element)

修改指定索引处的元素,返回被修改的元素
E get(int index) 返回指定索引处的元素
import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        List list = new ArrayList<>();

        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        System.out.println(list);

        // 在某个索引位置插入元素
        list.add(2,"汤姆");
        System.out.println(list);

        // 根据索引删除元素,返回被删除的元素
        System.out.println(list.remove(2));
        System.out.println(list);

        // 返回集合中指定位置的值
        System.out.println(list.get(3));

        // 修改索引位置的值。修改成功后,会返回原来的数据
        System.out.println(list.set(1, "汤姆"));
        System.out.println(list);
    }
}

遍历方式

  1. for循环(因为List集合有索引)
  2. 迭代器
  3. 增强for循环
  4. Lambda表达式

ArrayList集合的底层原理

  • 基于数组实现的。
    • 数组的特点(查询快,增删慢)

      • 查询速度快(注意:是根据索引查询数据快)查询数据通过地址值和索引定位,查询任意数据耗时相同。
      • 删除效率低:可能需要把后面很多的数据进行前移
      • 添加效率极低:可能需要把后面很多的数据后移,再添加元素;或者也可能需要进行数组的扩容。

ArrayList集合的底层原理

  1. 利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组
  2. 添加第一个元素时,底层会创建一个新的长度为10的数组
  3. 存满时,会扩容1.5倍
  4. 如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度一实际为准

ArrayList集合适用的应用场景

  1. ArrayList适合:根据索引查询数据,比如根据随机索引取数据(高效)或者数据不是很大时
  2. ArrayList不适合:数据量大的同时,有要频繁进行增删操作

LinkedList集合的底层原理

  • 基于双链表实现的。

什么是链表?有什么特点?

  • 链表中的结点是独立的对象,再内存中是不连续的,没个结点包含数据值和下一个结点的地址。
  • 链表的特点1:查询慢,无论查询哪个数据都要从头开始找。
  • 链表的特点2:链表增删相对快 

  •  特点:查询慢,增删相对较快,但对首尾元素进行增删改查的速度是极快的。

LinkedList新增了:很大首尾操作的特有方法。

LinkedList的应用场景之一 :可以用来设计队列

        队列的特点:先进先出,后进后出

集合框架(二)_第1张图片

LinkedList的应用场景之一 :可以用来设计栈

        栈的特点:后进先出,先进后出

集合框架(二)_第2张图片

 数据进入栈模型的过程称为:压/进栈(push)

数据离开栈模型的过程称为:弹/出栈(pop)

你可能感兴趣的:(java,排序算法)