第七章.集合——单列集合——List

List特点为:存储有序,可存储重复元素,三个实现类为

1.ArrayList(数组列表)

特点:查找效率高,实现了长度可变,在内存中分配了连续的空间

创建ArrayList对象时建议使用有参构造方法,使用无参构造时,默认容量为10

1.1add()方法  无参时默认添加到数组末尾,有参数(索引,添加的元素)时,添加到指定索引处

添加元素时,首先要判断容量是否足够添加,如果无法完成添加,需要先扩容,再添加元素时,此时的容量为原来的1.5倍。

public class ArrayList1<T> {
    public static void main(String[] args) {
        ArrayList<String> e = new ArrayList<String>();
        //创建一个
        e.add("a");
        e.add("b");
        e.add("c");
        e.add("d");
        e.add(1,"k");
        System.out.println(e);
}
}
//输出结果为:
[a, b, c, d]
[a, k, b, c, d]

1.2get()方法  注;先检查索引是否合法,即就是判断索引是否越界,通过索引返回元素

public class ArrayList1<T> {
    public static void main(String[] args) {
        ArrayList<String> e = new ArrayList<String>();
        //创建一个
        e.add("a");
        e.add("b");
        e.add("c");
        e.add("d");
        System.out.println(e);
        e.add(1,"k");
        System.out.println(e);
        System.out.println(e.get(1));
        //获得索引处对应的元素

    }
}

1.3set()方法  设置指定索引处元素

public class ArrayList1<T> {
    public static void main(String[] args) {
        ArrayList<String> e = new ArrayList<String>();
        //创建一个
        e.add("a");
        e.add("b");
        e.add("c");
        e.add("d");
        System.out.println(e);
        e.add(1,"k");
        System.out.println(e);
        e.set(1, "B");
        //将指定索引处的元素替换为某一元素
        System.out.println(e);
       

    }
}
//输出结果:
[a, b, c, d]
[a, k, b, c, d]
[a, B, b, c, d]

2.2LinkedList(链表)

特点:中间删除,添加效率高,底层通过链表实现,可以实现队列和栈的结构,无索引,但存在一个节点Node

2.1add()方法  添加元素时必须从第一个结点开始

import java.util.LinkedList;

public class LinkedLIst1 {
    public static void main(String[] args) {
        LinkedList<String> s=new LinkedList<String>();
        s.add("a");
        s.add("b");
        s.add("c");
        //向指定位置处添加元素
        s.add(1,"d");
        System.out.println(s);
    }

}

add()方法的底层源码为:通过节点Node依次指向下一个元素

 void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }

2.2get()方法:通过编号查找元素,注意并非索引

import java.util.LinkedList;

public class LinkedLIst1 {
    public static void main(String[] args) {
        LinkedList<String> s=new LinkedList<String>();
        s.add("a");
        s.add("b");
        s.add("c");
        s.add(1,"d");
        System.out.println(s);
        System.out.println(s.get(2));
    }
}
/*输出结果
[a, d, b, c]
b
 */

3.Vector(数组列表)

特点:底层同样是通过数组实现,不过Vector对比与ArrayList而言,是线程安全的,因为Vector底层多了一个安全锁

3.1add()方法  添加元素时先判断容量是否足够,如果容量不够无法完成添加,会先进行扩容操作,与ArrayList中不同的是数组扩容会扩容到原来的两倍

import java.util.Vector;

public class Vector1 {
    public static void main(String[] args) {
        Vector<String> d=new Vector<String>(1);
        d.add("f");
        d.add("g");
        d.add("h");
        System.out.println(d);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值