廖雪峰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());
    }
}
## 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两种实现

ArrayList LinkedList
获取指定元素 速度很快 需要从头开始查找元素
添加元素到末尾 速度很快(如果当前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);
        }
    }
}
### 4.2方法二:使用iterator ```#java import java.util.ArrayList; import java.util.Iterator; import java.util.List;

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

<img src="https://img2018.cnblogs.com/blog/1418970/201903/1418970-20190306192903671-902400506.png" width="500" />
###    4.3方法三:使用for each循环
```#java
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);
        }
    }
}

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()]);
    }
}
### 5.2Array-->List * 方法1: ```#java 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 list1 = Arrays.asList(array);
//返回的list不是list,而是Arrays内部实现的ArrayList类,
// 而且是只读的,不能增加和删除
System.out.println(list1.getClass());
System.out.println(Arrays.asList(array).getClass());

}

}

<img src="https://img2018.cnblogs.com/blog/1418970/201903/1418970-20190306201100790-399710292.png" width="500" />

*    方法2:
```#java
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());
    }
}

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));
    }
}

7.总结:

List的特点:

  • 按索引顺序访问的长度可变的链表
  • 优先使用ArrayList而不是LinkedList
  • 可以直接使用for each遍历
  • 可以和Array相互转换
posted on 2019-03-06 14:02  singleSpace  阅读(395)  评论(0编辑  收藏  举报