【Java集合类之使用List】

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

除了使用ArrayListLinkedList,我们还可以通过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来访问ListIterator本身也是一个对象,但是它是由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[])传入一个类型相同的ArrayList内部自动把元素复制到传入的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提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlanAbner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值