JAVA基础(集合进阶) —— List集合

通过之前对 JAVA基础 —— 集合 的学习,我们对于集合的概念以及ArrayList都有了初步的了解。

Collection单列集合JAVA基础(集合进阶) —— Collection单列集合
 List集合JAVA基础(集合进阶) —— List集合
泛型JAVA基础(集合进阶) —— 泛型
Set集合JAVA基础(集合进价) —— Set集合

并且进一步通过 JAVA基础(集合进阶) —— Collection单列集合 的学习,接下来我们将对List集合开始进一步的学习。


目录

 一、 List集合的特有方法

二、List集合的遍历方式

1. 重点注意:列表迭代器遍历

2.  五种遍历方式对比

三、ArrayList集合底层原理

 四、LinkedList集合


List集合:

特点:

  • 有序:存和取的元素顺序一致
  • 有索引:可以通过索引操作元素
  • 可重复:存储的元素可以重复

 一、 List集合的特有方法

  • Collection的方法 List都继承了。
  • List集合因为有索引,所以多了索引操作的方法。
方法名称说明
void add (int index , Element element)在此集合中的指定位置插入指定的元素
Element remove (int index )删除指定索引处的元素,返回被删除的元素
Element set(int index ,  Element element)修改指定索引处的元素,返回被修改的元素
Element get (int  index )返回指定索引处的元素
public class ListTest {
	public static void main(String[] args) {
		// 1.创建一个集合
		// List也是接口 不能直接创建接口对象
		// 创建List实现类对象
		List<String> list = new ArrayList<>();

		// 2.添加元素
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		System.out.println(list); // [aaa, bbb, ccc]

		// 3.指定位置添加元素
		list.add(1, "qqq");
		// 细节:原来索引上的元素会依次往后移
		System.out.println(list); // [aaa, qqq, bbb, ccc]

		// 4.删除指定位置元素,并返回删除值
		String remove = list.remove(0);
		System.out.println(remove); // aaa
		System.out.println(list); // [qqq, bbb, ccc]

		// 5.修改指定索引上元素,返回被修改元素
		String result = list.set(0, "aaa");
		System.out.println(result); // qqq
		System.out.println(list); // [aaa, bbb, ccc]

		// 6.获取指定索引元素
		String s = list.get(0);
		System.out.println(s); // aaa
	}
}

注意:

List集合删除元素有两种:

remove(Object  o直接删除元素
remove(int  index通过索引进行删除
public class ListTest {
	public static void main(String[] args) {
		// 创建集合
		List<String> list = new ArrayList<>();

		// 添加元素
		list.add("1");
		list.add("2");
		list.add("3");

		// 删除元素
		// 请问:此时删除的是1这个元素,还是1索引上的元素?
		// 为什么?
		// 因为我们在调用方法 的时候,如果方法出现重载现象
		// 优先调用,实参和形参类型一致的那个方法
		// 根据索引删除
		list.remove(1);

		// 通过手动装箱:手动把基本数据类型的1 变成Integer类型
		// 进行直接删除对象
		Integer i = Integer.valueOf(1);
		list.remove(i);

		System.out.println(list);
	}
}

二、List集合的遍历方式

  •  迭代器遍历
  • 列表迭代器遍历
  • 增强for遍历
  • Lambda表达式遍历
  • 普通for循环(因为List集合有索引)
public class ListTest {
	public static void main(String[] args) {
		// 创建集合对象并添加元素
		List<String> list = new ArrayList<>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");

		// 1.迭代器
		Iterator<String> it = list.iterator();
		while (it.hasNext()) {
			String str = it.next();
			System.out.println(str);
		}

		// 2.增强for
		// 下面变量s:只是第三方变量
		// 在循环过程中,依次表示集合中的每一个元素
		for (String s : list) {
			System.out.println(s);
		}

		// 3.Lambda表达式
		// forEach方法的底层就是一个循环遍历
		// 依次得到每一个元素,并把元素传递给下面的accept方法
		// accept方法的形参s,依次表示集合中每一个元素

		list.forEach(s -> System.out.println(s));
		
		//4.普通for遍历
		//size方法 + get方法 + 循环结合
		//利用索引获取到集合中每一个元素
		for (int i = 0; i < list.size(); i++) {
			String str = list.get(i);
			System.out.println(str);
		}
	}
}

1. 重点注意:列表迭代器遍历

查看API帮助文档:

public class ListTest {
	public static void main(String[] args) {
		// 创建集合对象并添加元素
		List<String> list = new ArrayList<>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");

		// 列表迭代器
		// 获取一个列表迭代器的对象,里面的指针默认也是指向0索引的

		// 在迭代器基础上:在遍历过程中,额外添加元素
		ListIterator<String> lIt = list.listIterator();
		while (lIt.hasNext()) {
			String s = lIt.next();
			if ("bbb".equals(s)) {
				// qqq
				// 不能使用list.add进行添加
				// 但是可以用迭代器本身进行添加
				lIt.add("qqq");
			}
		}
		System.out.println(list); // [aaa, bbb, qqq, ccc]
	}
}

2.  五种遍历方式对比

迭代器遍历在遍历的过程中需要删除元素,请使用迭代器。
列表迭代器在遍历的过程中需要添加元素,请使用列表迭代器。
增强for遍历仅仅想遍历,那么使用增强for或Lambda表达式
Lambda表达式
普通for遍历如果遍历的时候想要操作索引,可以使用普通for。

三、ArrayList集合底层原理

  1. 利用空参创建创建的集合,在底层创建一个默认长度为0的数组
  2. 添加第一个元素时,底层会创建一个新的长度为10的数组

  3. 存满时,会扩容1.5倍。

  4. 如果一次添加多个元素,1.5倍还放不开,则新创建数组的长度以实际为准。

 四、LinkedList集合

  • 底层数据结构是双链表,查询慢,增删快,但是如果操作的是首尾元素,速度也是极快的。

  • LinkedList本身多了很多直接操作首尾元素特有API。
特有方法说明
public void addFirst (E e)在该列表开头插入指定的元素
public void addLast (E e)将指定的元素追加到此列表的末尾
public E getFirst ( ) 返回此列表中的第一个元素
public E getLast ( )返回此列表中的最后一个元素
public E removeFirst ( )从此列表中删除并返回第一个元素
public E removeLast ( )从此列表中删除并返回最后一个元素
添加第一个元素
添加第二个元素
添加第三个元素
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hgngy.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值