• Dart(14)-List集合


    一、简介

    (1)dart中没有严格区分可变集合和不可变集合。

    (2)Dart中可以直接打印List内的元素,而不是像Java打印List对象的地址。

    (3)List集合的下标是从0开始

      (4)  支持泛型

    二、初始化方式

    方式1:直接使用[]初始化
    
    List<int> ageList = [17, 18, 19, 30];
    方式2:带泛型声明
    
    var ageList = <int> [17, 18, 19, 30];
    方式3:实例化定长List对象
    
    List<int> ageList = List(14); //初始化后集合里面的内容全为空,一旦指定了集合长度,不能再调用add方法
    方式4:实例化动态增长List对象
    
    List<int> ageList = List(); // 相当于 List<int> ageList = []; 初始化完之后,不能直接ageList[3]=12,这样会报错。应该使用ageList.add(11);

    三、遍历方式

    方式1:for
      for(var i = 0; i < ageList.length; i++){...}
    方式2:forEach
      ageList.forEach((age){...}) 
    方式3:for-in
      for(var age in ageList) {...}
    方式4:iterator迭代器
      while(ageList.iterator.moveNext()) { ageList.iterator.current }

    四、类关系图

     

    五、代码注解

    1. part of dart.core;
    2. abstract class List<E> implements EfficientLengthIterable<E> {
    3.  external factory List([int? length]);
    4.  external factory List.filled(int length, E fill, {bool growable = false});
    5.  @Since("2.8")
    6.  external factory List.empty({bool growable = false});
    7.  external factory List.from(Iterable elements, {bool growable = true});
    8.  external factory List.of(Iterable elements, {bool growable = true});
    9.  external factory List.generate(int length, E generator(int index),{bool growable = true});
    10.  external factory List.unmodifiable(Iterable elements);
    11.  static List<T> castFrom<S, T>(List source) => CastList(source);
    12.  static void copyRange<T>(List target, int at, List source,
    13.     [int? start, int? end]) {
    14.    start ??= 0;
    15.    end = RangeError.checkValidRange(start, end, source.length);
    16.    if (end == null) {
    17.      // TODO(dart-lang/language#440): Remove when promotion works.
    18.      throw "unreachable";
    19.   }
    20.    int length = end - start;
    21.    if (target.length < at + length) {
    22.      throw ArgumentError.value(target, "target",
    23.          "Not big enough to hold $length elements at position $at");
    24.   }
    25.    if (!identical(source, target) || start >= at) {
    26.      for (int i = 0; i < length; i++) {
    27.        target[at + i] = source[start + i];
    28.     }
    29.   } else {
    30.      for (int i = length; --i >= 0;) {
    31.        target[at + i] = source[start + i];
    32.     }
    33.   }
    34. }
    35.  static void writeIterable<T>(List target, int at, Iterable source) {
    36.    RangeError.checkValueInInterval(at, 0, target.length, "at");
    37.    int index = at;
    38.    int targetLength = target.length;
    39.    for (var element in source) {
    40.      if (index == targetLength) {
    41.        throw IndexError(targetLength, target);
    42.     }
    43.      target[index] = element;
    44.      index++;
    45.   }
    46. }
    47.  List<R> cast<R>();
    48.  E operator [](int index);
    49.  void operator []=(int index, E value);
    50.  void set first(E value);
    51.  void set last(E value);
    52.  int get length;
    53.  set length(int newLength);
    54.  void add(E value);
    55.  void addAll(Iterable iterable);
    56.  Iterable get reversed; //倒序过来并返回Iterable
    57.  void sort([int compare(E a, E b)?]); //排序
    58.  void shuffle([Random? random]); //将list重新洗牌
    59.  int indexOf(E element, [int start = 0]);//查找列表中某对象的索引,第二个参数是从第几开始计数
    60.  int indexWhere(bool test(E element), [int start = 0]);//查找列表中某对象的索引,从前往后找,第二个参数是从第几开始计数
    61.  int lastIndexWhere(bool test(E element), [int? start]);//查找列表中某对象的索引,从后往前找,第二个参数是从第几开始计数
    62.  int lastIndexOf(E element, [int? start]);
    63.  void clear();
    64.  void insert(int index, E element);// 从指定位置插入
    65.  void insertAll(int index, Iterable iterable);
    66.  void setAll(int index, Iterable iterable);
    67.  bool remove(Object? value);
    68.  E removeAt(int index);//移除集合中第index+1个元素
    69.  E removeLast();
    70.  void removeWhere(bool test(E element)); //按条件删除集合中的元素
    71.  void retainWhere(bool test(E element)); //按条件保留结合中的元素
    72.  List operator +(List other); //两个集合相加操作
    73.  List sublist(int start, [int? end]);//截取某段
    74.  Iterable getRange(int start, int end); //截取某段,[a,b)
    75.  void setRange(int start, int end, Iterable iterable, [int skipCount = 0]);
    76.  void removeRange(int start, int end);
    77.  void fillRange(int start, int end, [E? fillValue]);
    78.  void replaceRange(int start, int end, Iterable replacement);
    79.  Map<int, E> asMap();
    80.  bool operator ==(Object other);
    81. }

    排序sort:

    1. List list = new List();
    2.  Student stu1 = new Student(19,'小孙');
    3.  Student stu2 =new Student(9,'小王');
    4.  Student stu3 = new Student(12,'小李');
    5.  Student stu4 = new Student(11,'小郭');
    6.  list.add(stu1);
    7.  list.add(stu2);
    8.  list.add(stu3);
    9.  list.add(stu4);
    10.  print(list.first.name);
    11.  print(list.elementAt(1).name);
    12.  print(list.elementAt(2).name);
    13.  print(list.last.name);
    14.  list.sort((a,b)=>b.age.compareTo(a.age));  //a和b可以自己任意定义,如果是a.compareTo(b) 升序,如果是b.compareTo(a) 降序
    15.  print("==============分割线==================");
    16.  print(list.first.name);
    17.  print(list.elementAt(1).name);
    18.  print(list.elementAt(2).name);
    19.  print(list.last.name);

    定位索引indexOf:

    print(list.indexOf(stu2, 0)); // 第一个参数是Studuent对象,第二个参数是从自定义的参数开始

    定位索引indexWhere:

    print(list.indexWhere((e) => e.age == 11, 0));

    按条件保留retainWhere:

    list.retainWhere((element) => element.age == 11);

  • 相关阅读:
    Python数组处理
    [基础服务] CentOS 7.x 安装 GitLab
    Nginx 学习(九)集群概述与LVS工作模式的配置
    【1796. 字符串中第二大的数字】
    Python中的区块链技术与应用
    C语言oj题
    11.7 校招 实习 内推 面经
    基于粒子群算法的电力系统无功优化研究(IEEE14节点)(Matlab代码实现)
    Vue渲染函数渲染html
    精简版 — Hive开发常用操作
  • 原文地址:https://blog.csdn.net/life491249957/article/details/126026481