Java集合类之使用List
廖雪峰java教程学习笔记
本博客是基于廖雪峰java教程写的学习笔记
文章目录
前言
本人计算机小白一枚,写博客的原因一是为了让自己能够更好地理解知识点,加强记忆,二是为了让有需要的同学康康,三是为了能够结交到有相同兴趣的小伙伴,大家一起加油!!!然后本博客只是对自己在教程中不熟悉的地方做一个记录,所以并不全面。
一、List和数组的区别
List
是最基础的一种集合,它是一种有序列表。
List
的行为和数组几乎完全相同:List
内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,List
的索引和数组一样,从0开始。
但是数组有一个致命的缺点就是在添加和删除元素的时候非常不方便,因此在实际的应用中,对于需要增删元素的有序列表,我们使用最多的就是ArrayList
。因为ArrayList
把添加和删除的操作封装起来了,让我们操作List
类似于操作数组,却不用关心内部元素如何移动。
二、List<E>
接口
我们介绍几个主要的接口方法:
- 在末尾添加一个元素:
boolean add(E e)
- 在指定索引位置添加一个元素:
boolean add(int index, E e)
- 删除指定索引的元素:
E remove(int index)
- 删除某个元素:
boolean remove(Object e)
- 获取指定索引的元素:
E get(int index)
- 获取链表大小(包含元素的个数):
int size()
三、利用LinkedList
实现List
接口
LinkedList
通过“链表”也实现了List接口,在LinkedList
中,它的内部每个元素都指向下一个元素:
通常情况下,我们一般使用ArrayList
。
四、List的特点
List
内部的元素可以重复;List
还允许添加null
;
五、创建List
除了使用ArrayList
和LinkedList
,我们还可以通过List
接口提供的of()
方法,根据给定元素快速创建List
:
List<Integer> list = List.of(1,2,5);
值得一提的是,
List.of()
方法不接受null
值,如果传入null
,会抛出NullPointerException
异常。
六、遍历List
和数组类型相似,我们要遍历一个List
,完全可以用for
循环根据索引配合get(int)
方法遍历:
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = List.of("apple","pear","banana");
for (int i = 0; i < list.size(); i++) {
Srring s = list.get(i);
System.out.println(s);
}
}
}
但是这种方式一般并不推荐,一是因为代码复杂,二是因为get(int)这个方法只是对ArrayList
的访问是最高效的,如果换成LinkedList
,那么随着索引的增大,访问的速度也就越慢。
因此,我们一般会使用迭代器Iterator
来访问List
。Iterator
本身也是一个对象,但是它是由List
的实例调用iterator()
来创建的,Iterator
对象知道如何遍历List
,不同的List
类型,返回的Iterator
对象实现也是不同的,但是总是具有最好的访问效率。
Iterator
对象有两个方法:
boolean hasNext(),判断是否有下一个元素;
E next(),返回下一个元素。
因此,使用Iterator
对象来遍历List
的代码如下:
import java.util.List;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
List<String> list = List.of("apple","pear","banana");
for (Iterator<String> it = list.iterator();it.hasNext();) {
String s = it.next();
System.out.println(s);
}
}
}
这样看来使用Iterator
来遍历List
好像也挺复杂的,但是别忘了Java的for each
循环本身就可以帮助我们使用Iterator
遍历,可以将上面的代码改写为
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = List.of("apple","pear","banana");
for (String s:list) {
System.out.println(s);
}
}
}
七、List和ArrayList转换
把List
变为ArrayList
有三种方法
- 调用
toArray()
方法直接返回一个Object[]
数组,但是这种方法会丢失类型的信息,所以实际应用很少。
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = List.of("apple", "pear", "banana");
Object[] array = list.toArray();
for (Object s : array) {
System.out.println(s);
}
}
}
- 给
toArray(T[])
传入一个类型相同的Array
,List
内部自动把元素复制到传入的Array
中:
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = List.of(12,34,56);
Integer[] array = list.toArray(new Integer[3]);
for (Integer n: array) {
System.out.println(n);
}
}
}
反过来把Array
变为List
就简单很多,通过List.of(T…)方法最简单:
Integer[] array = { 1, 2, 3 };
List<Integer> list = List.of(array);
值得注意的是:如果我们调用List.of()
,它返回的是一个只读的List
,不可以修改!!!
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。