1.List原理
2.List常用的方法
3.ArrayList和LinkedList比较
4.创建List和遍历List
5.list和array转换
1.List原理
2.List常用的方法
- 在末尾添加一个元素:
void add(E e)
- 在指定索引添加一个元素:
void add(int index, E e)
- 删除指定索引的元素:
int remove(int index)
- 删除某个元素:boolean
remove(Object e)
- 获取指定索引的元素:
E get(int index)
- 获取链表大小(包含元素的个数):
int size()
疑问:remove(1)是删除元素1还是index=1的元素呢
public class testFunction { public static void main(String[] args){ List<String> list = new ArrayList<String>(); // 1.add(E e) 在末尾添加一个元素 list.add("a"); list.add("b"); list.add("c"); //2.add(int index, E e) 在指定索引添加一个元素 list.add(0, "0"); //打印list [0, a, b, c] System.out.println(list); //3.获取链表长度 4 System.out.println(list.size()); //4.get(index)获取链表索引是2的值 b System.out.println(list.get(2)); //5.remove(index)删除指定索引的值 list=[0, a, b, c] 返回b System.out.println(list); System.out.println(list.remove(2)); System.out.println(list); //6.remove(E e)删除某个元素 list=[0, a, c] 返回true System.out.println(list.remove("a")); } }
3.ArrayList和LinkedList比较
ArrayList | LinkedList | |
获取指定元素 | 快 | 慢,需要从头查找元素 |
添加元素到末尾 | 快 | 快 |
在指定位置添加/删除元素 | 慢,需要移动元素 | 快,不需要移动元素 |
内存占用 | 少 | 较大 |
4.创建List和遍历List
创建List:
方法1 add():
public class testFunction { public static void main(String[] args){ List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add(null); System.out.println(list); for(Iterator<String> it = list.iterator();it.hasNext();) { String s = it.next(); System.out.println(s); } } }
方法2:
除了使用ArrayList
和LinkedList
,我们还可以通过List
接口提供的of()
方法,根据给定元素快速创建List
:
List<Integer> list = List.of(1, 2, 5);
但是List.of()
方法不接受null
值,如果传入null
,会抛出NullPointerException
异常。
备注:以上是Java9特性
list的遍历:
Iterator
对象知道如何遍历一个List
,并且不同的List
类型,返回的Iterator
对象实现也是不同的,但总是具有最高的访问效率。
Iterator
对象有两个方法:boolean hasNext()
判断是否有下一个元素,E next()
返回下一个元素。因此,使用Iterator
遍历List
代码如下:
public class Third{ public static void main(String[] args){ List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); for (Iterator<Integer> it = list.iterator();it.hasNext();){ Integer s = it.next(); System.out.println(s); } } }
通过Iterator
遍历List
永远是最高效的方式。并且,由于Iterator
遍历是如此常用,所以,Java的for each
循环本身就可以帮我们使用Iterator
遍历。把上面的代码再改写如下:
public class Third{ public static void main(String[] args){ List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); for (Integer s:list){ System.out.println(s); } } }
只要实现了Iterable
接口的集合类都可以直接用for each
循环来遍历,Java编译器本身并不知道如何遍历集合对象,但它会自动把for each
循环变成Iterator
的调用,原因就在于Iterable
接口定义了一个Iterator<E> iterator()
方法,强迫集合类必须返回一个Iterator
实例。
5.list和array转换
list转换为array:
public class Third{ public static void main(String[] args){ List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); Integer[] array = list.toArray(new Integer[list.size()]); //改进写法:Integer[] array = list.toArray(Integer[]::new); for (Integer n:array){ System.out.println(n); } } }
array转换为list:
Integer[] array = { 1, 2, 3 };
List<Integer> list = List.of(array);
对于JDK 11之前的版本,可以使用Arrays.asList(T...)
方法把数组转换成List
public class Third{ public static void main(String[] args){ String[] s = {"aa","bb","cc"}; List<String> strlist = Arrays.asList(s); for(String str:strlist){ System.out.println(str); } } }