深入理解Dart中集合类型:List

181 阅读3分钟

屏幕截图 2025-02-17 113843.png

前言

Dart中的list是一种动态数组,用于存储单个或者多个元素,元素类型可多样,大小可动态变化。它常用于存储和管理一组相关数据,如学生名单、购物清单等。list支持动态添加、删除元素,还可遍历所有元素并查找元素位置。

一、基本概念

  • 定义List是一种动态数组,可以存储任意类型的对象,并且可以根据需要动态增长和缩小。
  • 特性
    • 有序性List中的元素保持插入顺序。
    • 可重复性:允许存储重复的元素。
    • 动态性:可以根据需要自动调整大小。

二、初始化方式

  • 动态类型定义:可以创建一个包含不同类型元素的列表。

    	List<dynamic> list = [1, 2, "3", true, 5.0];
    
  • 明确类型定义:通过泛型指定列表中元素的类型,确保类型安全。

    	List<int> list = [1, 2, 3, 4, 5];
    
  • 空列表初始化:创建一个空列表,后续可以动态添加元素。

    	 List<String> emptylist = List.empty(growable: true);
    
  • 固定长度列表:创建一个具有固定长度的列表,所有元素初始化为相同的值。

    	 List<String> list = List.filled(10, "default");
    

三、常用操作方法

  • 增删改查

    • 添加元素

      • add(value):在列表末尾添加一个元素。
      • addAll(iterable):在列表末尾添加多个元素。
      • insert(index, value):在指定索引处插入一个元素。
      • insertAll(index, iterable):在指定索引处插入多个元素。
    • 删除元素

      • remove(value):删除列表中第一个匹配的元素。(考虑有重复元素)
      • removeAt(index):删除指定索引处的元素。
      • removeLast():删除列表中的最后一个元素。
      • removeWhere(test):删除所有满足条件的元素。
      • clear():清空列表中的所有元素。
    • 修改元素

      • setAll(index, iterable):将指定索引处的元素替换为新的迭代元素。
      • setRange(start, end, iterable):将指定范围内的元素替换为新的迭代元素。(区间为左开右闭)
    • 查找元素

      • indexOf(value):返回元素在列表中的第一个索引。(考虑有重复元素)
      • lastIndexOf(value):返回元素在列表中的最后一个索引。(考虑有重复元素)
      • contains(value):检查列表中是否包含指定的元素。
    • 排序

      • sort([compare]):对列表中的元素进行排序,可以提供一个可选的比较函数。

    四、遍历操作

    • for循环遍历

      List<int> list = [1,2,3,4,5,];
      for(i=0;i<=list.lenght -1 ;i++){
          print(list[1]);
      }
      
    • forEach遍历

       List<int> list = [1,2,3,4,5,];
       list.forEach((ls){
           print(ls);
       });
      
    • for-in 遍历

      List<int> list = [1,2,3,4,5,];
      for(var ls in list){
          print(ls);
      }
      

五、实践注意

  • 明确类型定义:在创建列表时,尽量使用泛型明确指定元素的类型,以提高类型安全性和代码可读性。
  • 使用字面量创建列表:Dart推荐使用字面量语法来创建列表,简洁且易于理解。
  • 避免使用cast进行类型转换:在需要类型转换时,尽量在创建列表时指定类型,避免使用cast方法进行类型转换,因为cast的性能较低。
  • 判断列表是否为空:使用isEmptyisNotEmpty方法来判断列表是否为空,而不是通过length == 0来判断,因为length属性可能需要遍历列表来计算。