廖雪峰Java5集合-2List-1使用List

1.List定义

List是一种有序链表:

  • List内部按照元素的先后顺序存放
  • 每个元素都可以通过索引确定自己的位置
  • 类似数组,但大小可变
//List<E>是一种有序链表:
//*    List的元素可以重复
//*    List的元素可以是null
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args){
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(2);
        list.add(null);
        list.add(3);
        System.out.println(list.size());
        System.out.println(list.toString());
    }
}

1418970-20190306185836923-1507466028.png

2.List常用方法:

  • void add(E e) 在末尾添加一个元素
  • void add(int index, E e) 在指定索引添加一个元素
  • int remove(int index) 删除指定索引的元素
  • int remove(Object e) 删除某个元素
  • E get(int index) 获取指定索引的元素
  • int size() 获取链表大小(包含元素的个数)

3.List特点

List是一种有序链表:
数组也是有序结构,但是大小固定,且删除元素时需要移动后续元素;因此使用数组添加和删除元素非常不方便。ArrayList是在内部使用数组存储所有元素的的链表。
https://blog.csdn.net/tangyaya8/article/details/76595488/

List有ArrayList和LinkedList两种实现

ArrayListLinkedList
获取指定元素速度很快需要从头开始查找元素
添加元素到末尾速度很快(如果当前List已满,需要重新复制一个新数组)速度很快
在指定位置添加、删除需要移动元素不需要移动元素
内存占用较大

通常情况下,优先使用ArrayList

4.遍历List使用Iterator或者foreach循环

4.1方法一:使用for循环

for循环对于ArrayList效率比较高,对于LinkedList效率比较低

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args){
        List<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("world");
        list.add("java");
        list.add(null);
        list.add("python");
        for(int i=0;i<list.size();i++){
            String s = list.get(i);
            System.out.println(s);
        }
    }
}

1418970-20190306192653977-321477118.png

4.2方法二:使用iterator

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Main {
    public static void main(String[] args){
        List<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("world");
        list.add("java");
        list.add(null);
        list.add("python");
        for(Iterator<String> it = list.iterator();it.hasNext();){
            String s = it.next();
            System.out.println(s);
        }
    }
}

1418970-20190306192903671-902400506.png

4.3方法三:使用for each循环

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args){
        List<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("world");
        list.add("java");
        list.add(null);
        list.add("python");
        for(String s:list){
            System.out.println(s);
        }
    }
}

1418970-20190306193125358-551025134.png

5.List和Array可以相互转换

5.1List-->Array

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args){
        List<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("world");
        list.add("java");
        list.add(null);
        list.add("python");
        //方法1
        Object[] array1 = list.toArray();
        System.out.println(Arrays.toString(array1));
        //方法2
        String[] array2 = list.toArray(new String[5]);
        System.out.println(Arrays.toString(array2));
        //多余的元素置为null
        String[] array3 = list.toArray(new String[6]);
        System.out.println(Arrays.toString(array3));
        //通常情况下,我们创建长度相等的数组,这样保证list的每一个元素和数组的每个元素一一对应
        String[] array4 = list.toArray(new String[list.size()]);
    }
}

1418970-20190306195818004-502718216.png

5.2Array-->List

  • 方法1:
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args){
        String[] array = {"hello","java","python",null,"world"};
        List<String> list1 = Arrays.asList(array);
        //返回的list不是list,而是Arrays内部实现的ArrayList类,
        // 而且是只读的,不能增加和删除
        System.out.println(list1.getClass());
        System.out.println(Arrays.asList(array).getClass());

    }
}

1418970-20190306201100790-399710292.png

  • 方法2:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args){
        String[] array = {"hello","java","python",null,"world"};

        //创建ArrayList并将只读list添加进去
        List<String> list1 = Arrays.asList(array);
        List<String> list2 = new ArrayList<>();
        list2.addAll(list1);
        System.out.println(list2.toString());
        System.out.println(list2.getClass());
        
        //将上面的代码整合到一行中
        List<String> list3 = new ArrayList<>(Arrays.asList(array));
        System.out.println(list3.toString());
        System.out.println(list3.getClass());
    }
}

1418970-20190306202549028-726512878.png

6.示例:

import java.util.*;

public class Main {
    public static void main(String[] args){
//        List<String> list = new ArrayList<>();
        List<String> list = new LinkedList<>();
        list.add("hello");
        list.add("world");
        list.add(null);
        list.add(3,"java");
        list.add(4,"python");
        System.out.println(list.getClass()+list.toString());

        String[] array = list.toArray(new String[list.size()]);
        System.out.println(array.getClass()+Arrays.toString(array));
    }
}

1418970-20190306204510412-20012288.png

7.总结:

List的特点:

  • 按索引顺序访问的长度可变的链表
  • 优先使用ArrayList而不是LinkedList
  • 可以直接使用for each遍历
  • 可以和Array相互转换

转载于:https://www.cnblogs.com/csj2018/p/10482863.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值