Java中的集合:List、Set、Map集合详解

一、关于集合的背景概况1、为什么会产生集合?集合可以类比到数组,都是储存多个数据的容器。数组:长度不可变,在定义时就已经指定其长度(巴士)集合:长度可变(火车,可以加车厢)所以,在使用层面上来说,使用集合会比使用数组更加便利。2、集合类概述说明:Collection是List和Set的父接口List和Set同样也是接口List常用的实现类:ArrayList和LinkedListSet常用的实现类:HashSet和TreeSet插入:Collection(集合名称) Collec
摘要由CSDN通过智能技术生成

一、关于集合的背景概况

1、为什么会产生集合?
集合可以类比到数组,都是储存多个数据的容器。
数组:长度不可变,在定义时就已经指定其长度(巴士)
集合:长度可变(火车,可以加车厢)
所以,在使用层面上来说,使用集合会比使用数组更加便利。
2、集合类概述
在这里插入图片描述
说明:
Collection是List和Set的父接口
List和Set同样也是接口
List常用的实现类:ArrayList和LinkedList
Set常用的实现类:HashSet和TreeSet

Map常用的实现类:HashMap和TreeMap

小知识:
Collection(集合名称) Collections(操作集合的工具类)
Array(数组名称) Arrays(操作数组的工具类)

说明:
首先,我们必须明确一点,以下所谈有序和无序不是指集合中的排序,而是指是否按照元素添加的顺序来存储对象。

二、List集合

List集合的特点:有序,可以有重复的元素。
常用实现类:ArrayList和LinkedList

1、ArrayList和LinkedList对比

(1)ArrayList集合
具有数组结构的list集合,有下标,可以通过下标查找、删除、修改、添加集合中的元素,下标和数组一样从0开始。
与数组对比: ArrayList集合的长度是可以改变的,添加元素和删除元素是不需要手动扩容和缩容的。

(2)LinkedList集合
双向链表结构,没有下标。
在这里插入图片描述
说明: 对于LinkedList集合中的一个元素,除了存放data信息,还存放着上一个元素以及下一个元素的地址信息。

(3)从查询角度看
在这里插入图片描述
(4)从修改角度看
在这里插入图片描述
(5) ArrayList必须是连续的内存空间,LinkedList不需要连续的内存空间。

综上所述:
查询方面:
ArrayList有下标,可以根据下标直接获取元素。
LinkedList没有下标,获取元素需要前后遍历

修改方面:
ArrayList删除和添加元素的机制类似于数组,效率慢。
LinkedList删除和添加元素,只需要断开指定的连接,在断开的地方添加或者修改元素、修改地址信息即可,相对ArrayList要快。

2、List集合常用方法

1、添加元素
集合名.add(o);

2、获取集合长度
集合名.size();

3、获取元素(通过下标)
集合名.get(index);

4、删除元素
集合名.remove(index);
remove的重载方法:
在这里插入图片描述
5、修改元素
集合名.set(index, o);

6、添加元素
例如:在下标为1的位置上插入
集合名.add(index,o);

以上,不管是ArrayList还是LinkedList集合都适合用,
后面会列举一些LinkedList集合特有的方法。

3、ArrayList集合遍历

for以及foreach的遍历方式省略不写。
(1)迭代器遍历
原理:
当获取到对应集合的迭代器时,光标指在集合最开始的那个元素,借助迭代器名.hasNext() 来判断是否有下一个元素,如果有则会返回true,没有则会返回false,即已经取到迭代器的末尾了。同时通过迭代器名.next() 来获取元素。

public class Test {
   
	public static void main(String[] args) {
   
		List<String> list = new ArrayList<String>();
		list.add("123");
		list.add("abc");
		list.add("456");
		//1、根据集合获取对应的迭代器
		Iterator<String> it = list.iterator();
		//2、判断后面还有无元素,如果有则输出,无则跳出循环
		while(it.hasNext()) {
   
			System.out.println(it.next());
		}
	}
}

(2)lambda表达式
JDK1.8之后的新特性。
演变过程复杂,所以展示其应用即可。

public class Test {
   
	public static void main(String[] args) {
   
		List<String> list = new ArrayList<String>();
		list.add("123");
		list.add
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值