Day_16 集合

本文深入讲解Java集合框架的核心概念,包括List、Set等接口的区别与实现原理,如ArrayList与LinkedList的特点,以及如何通过Iterator进行高效遍历。

1. 数组封装

1.1 数组的增删改查

查询

更改

添加 

删除 

 1.2 使用

 

 2. 集合

Java集合是使程序能够存储和操纵元素不固定的一组数据。

2.1 继承体系 

Collection 是集合,两个直接子接口是List和set

List 特性 : 有序 可重复,保证数据的添加顺序和取出顺序一致

Set 特性 : 无序 不可重复,不能保证数据的添加和取出顺序一致

List 有三个子类 :

1. ArrayList : 底层是数组,查询和更改效率极高

2. LinkedList : 底层是双向链表,添加和删除效率要高一些

3. Vector : 底层也是数组,是线程安全,已废弃,不推荐使用,已被ArrayList代替

Set有两个子类 :

1. HashSet : 底层是散列表

2. TreeSet : 底层是二叉树

2.3 Collection

Collection作为集合类的父类,所以,collection中的方法,是所有集合类都有的方法

常用方法 : 

 

使用

 2.4 Iterator

Iterator 迭代器 :迭代器是一种模式,它可以使遍历和被遍历的对象相分离,我们就不再关心底层是什么数据结构,是如何进行数据存储的只要拿到迭代器对象,就可以进行遍历

 collection中 提供了一个 iterator() 方法 用于获取迭代器对象                集合.iterator();

  迭代器中,有三个方法 :

1 boolean  hasNext() : 判断游标下是否还有元素,默认指向顶端,并没有指向第一个元素

2 E next() : 将迭代器游标向下移动一位,并取出该元素

3 remove () : 删除当前执行的元素,会把集合中的也删除

注意 :

迭代器一旦创建,集合不能添加和删除,如果添加和删除了,需要重新生成迭代器

增强for循环forEach 就是迭代器的简写方式

 

2.5 contains   remove

contains(Object o) : 判断是否包含某个元素

remove(Object o ) : 删除指定元素

这两个方法,底层都会去调用equals方法进行比较

 

 2.6 forEach

增强for循环forEach 就是迭代器的简写方式

 

2.7 List

2.7.1 ArrayList

List 特性 : 有序 可重复,保证数据的添加顺序和取出顺序一致

List 有三个子类 : 

1. ArrayList : 底层是数组,查询和更改效率极高 ,默认初始化容量为10,扩大为原来的1.5倍,非线程安全,创建对象的时候,没有容量,就是0 , 当第一次添加数据的时候,才会初始化容量

 2.LinkedList : 底层是双向链表,添加和删除效率要高一些

3. Vector : 底层也是数组,是线程安全,已废弃,不推荐使用,已被ArrayList代替,默认认初始化容量为10,扩大为原来的2倍

注意 : 

集合中只能保存引用数据类型,如果添加的是基本类型的话,会先进行自动装箱为对应的包装类,然后发生多态转型为Object类型

用法 :

 

 

<think>好的,我现在需要解释用户提供的代码片段`day_date_list.extend(day_datas)`。首先,我应该确认自己对这个语句的理解是否正确。`extend()`是Python中列表的一个方法,用于将一个可迭代对象的所有元素添加到列表末尾。这里的`day_date_list`应该是一个列表,而`day_datas`可能是另一个列表或可迭代对象。 接下来,我需要思考用户可能的疑问点。他们可能想知道`extend()`和`append()`的区别,或者这个操作的具体效果。例如,如果`day_datas`是一个列表,使用`extend()`会将它的元素逐个添加,而`append()`则会将其作为单个元素添加。我需要用例子来说明这一点,比如原来的列表是`[1,2,3]`,`extend([4,5])`会变成`[1,2,3,4,5]`,而`append([4,5])`则变成`[1,2,3,[4,5]]`。 然后,我需要考虑用户的使用场景。可能他们在处理日期数据,比如将多个日期的数据合并到一个列表中。例如,假设`day_date_list`存储了某几天的日期,而`day_datas`是另一批日期,使用`extend()`可以将两者合并。需要提醒用户确保`day_datas`确实是可迭代的,否则会抛出错误,比如如果`day_datas`是整数,就会报错。 另外,要注意`extend()`方法会直接修改原列表,而不是返回新列表。这和`+`操作符不同,后者会创建新列表。例如,`a = a + b`和`a.extend(b)`效果相同,但`extend()`更高效,尤其是处理大数据时。 可能用户在使用过程中遇到了问题,比如元素没有正确添加,或者类型错误。需要指出常见的错误,比如`day_datas`不是可迭代对象,或者误用了`append`导致结构变化。 最后,总结这个语句的作用,强调它用于合并列表元素,并提醒注意事项,比如可迭代性、原地修改等。确保解释清晰,结构合理,帮助用户理解并正确使用`extend()`方法。</think>我们来逐步解释代码`day_date_list.extend(day_datas)`的作用和原理: --- ### 1. **基本定义** - `day_date_list`:是一个Python列表(List)对象 - `day_datas`:需要被合并到`day_date_list`中的另一个可迭代对象(如列表、元组、集合等) --- ### 2. **`.extend()`方法的作用** - **功能**:将`day_datas`中的所有元素**逐个添加**到`day_date_list`的末尾 - **与`.append()`的区别**: - `.append(x)`:将整个`x`作为单个元素添加到列表 - `.extend(x)`:将`x`中的每个元素拆开后再逐个添加 #### 示例对比: ```python a = [1, 2, 3] b = [4, 5] # 使用 append a.append(b) # 结果: [1, 2, 3, [4, 5]] # 使用 extend a.extend(b) # 结果: [1, 2, 3, 4, 5] ``` --- ### 3. **典型使用场景** 假设你正在处理日期数据: ```python day_date_list = ["2023-10-01", "2023-10-02"] day_datas = ["2023-10-03", "2023-10-04"] day_date_list.extend(day_datas) # 结果: ["2023-10-01", "2023-10-02", "2023-10-03", "2023-10-04"] ``` --- ### 4. **注意事项** 1. **可迭代性要求**:`day_datas`必须是可迭代对象(如列表、元组),否则会抛出`TypeError` ```python # 错误示例(整数不可迭代) day_datas = 100 day_date_list.extend(day_datas) # TypeError ``` 2. **原地修改**:`.extend()`会直接修改原列表`day_date_list`,而不是返回新列表 3. **性能优势**:相比`+`操作符(如`new_list = a + b`),`.extend()`更高效,尤其适合合并大型列表 --- ### 5. **等价实现** 若不用`.extend()`,可以用循环模拟: ```python for item in day_datas: day_date_list.append(item) ``` --- ### 总结 `day_date_list.extend(day_datas)`的作用是:将`day_datas`中的所有元素逐个添加到`day_date_list`末尾,最终实现两个列表的**扁平化合并**。使用时需确保`day_datas`为可迭代对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值