java List使用Map泛型和使用自定义泛型

1 Map 泛型

// 创建一个 List,用于存储多个 Map
List> dataList = new ArrayList<>();

1.1打印出来

[{date=2023-07-21, title=公告}, {date=2023-07-21, title=公告}, {date=2023-07-21, title=公告}, {date=2023-07-21, title=公告}, {date=2023-07-21, title=公告}, {date=2023-07-21, title=公告}]

1.2 完整代码

public static void main(String[] args) {

    public class GetNe {
    String url = "https://www.xxx.com";
    try {
        // 创建一个 List,用于存储多个 Map
       List> dataList = new ArrayList<>();
 
       // 遍历每个 
  • 元素并获取文字内容 for (Element liElement : liElements) { // 获取标题和日期的元素 Element titleElement = liElement.selectFirst("div.index_title__6wUnB"); Element dateElement = liElement.selectFirst("div.index_date__7jmiW"); // 获取标题和日期的文本内容 if (titleElement != null) { String title = titleElement.text(); String date = dateElement.text(); // 创建一个 Map,用于存储属性 Map item = new HashMap<>(); // 添加属性 item.put("title", title); item.put("date", date); // 将 Map 添加到 List 中 dataList.add(item); } System.out.println(articles); }} catch (IOException e) { e.printStackTrace(); } } }
  • 2 自定义泛型

    2.1 自定义类

    
    
      static class Article {
        private String title; // 全类作用域变量 --> 成员变量
        private String date;
    
        public Article(String title, String date) { // 构造方法 用来 创建对象并初始化对象的属性
          this.title = title; // 这里用this 是因为 参数和成员变量相同 
          this.date = date;
        }
    
        public String getTitle() {
          return title;
        }
    
        public String getDate() {
          return date;
        }
      }
    
    // 如果不用 this可以改成
    
    
      static class Article {
        private String title; // 全类作用域变量 --> 成员变量
        private String date;
    
        public Article(String a, String b) {
          title = a;
          date = b;
        }
    
        public String getTitle() {
          return title;
        }
    
        public String getDate() {
          return date;
        }
      }
    在构造方法中,当参数名与成员变量名相同时,使用 this 关键字可以帮助区分参数和成员变量。
    
    在你提供的示例代码中,this.title = title; 和 this.date = date; 表示将构造方法的参数 title 和 date 分别赋值给类的成员变量 title 和 date。
    
    通过使用 this 关键字,可以明确指定要操作的是当前对象的成员变量,而不是局部变量(在这种情况下是构造方法的参数)。这样做是为了避免混淆和歧义,同时确保正确地初始化对象的属性。
    
    当局部变量和成员变量同名时,使用 this 可以显式地指明要操作的是成员变量,而不是局部变量。这样可以确保代码的可读性和准确性,并避免潜在的错误。
    
    总之,使用 this 关键字可以帮助区分成员变量和局部变量,以便正确地初始化对象属性,并避免混淆和歧义。
    当成员变量和方法参数的名称不相同时,可以直接使用变量名进行赋值,而不需要使用 this 关键字。
    
    在你提供的示例代码中,构造方法的参数名为 a 和 b,而成员变量的名称为 title 和 date。因为它们的名称不相同,所以可以直接使用变量名进行赋值。
    
    所以,你可以在构造方法中使用 title = a; 和 date = b; 来将参数赋值给成员变量,而不需要使用 this 关键字。
    
    需要注意的是,当成员变量和方法参数的名称相同时,为了明确指定要操作的是成员变量,而不是方法参数,你需要使用 this 关键字。这样可以避免混淆和歧义。
    
    总结起来,如果成员变量和方法参数的名称不相同,可以直接使用变量名进行赋值;如果名称相同,则需要使用 this 关键字来指明要操作的是成员变量。

    2.2 调用 Article 类中的构造方法 public Article(String title, String date)创建对象并初始化对象的属性

     Article article = new Article(title, date);

    3 Map泛型和 自定义泛型区别,一个添加得对象固定 一个添加得对象灵活

    这两种方法的区别在于数据的组织方式和访问方式。
    
    使用 List
    的方法: 首先,定义了一个名为 Article 的类,该类有一个构造函数和两个获取属性的方法。 创建一个 Article 对象,并通过构造函数传入标题和日期。 将创建的 Article 对象添加到 List
    (即 articles)中。 这种方法通过创建一个自定义的 Article 类来封装标题和日期的信息,并使用 List 来存储多个 Article 对象。使用这种方法,你可以方便地访问和操作每个 Article 对象的属性,例如获取标题和日期。 使用 List> 的方法: 首先,定义了一个 List,其中每个元素都是一个 Map 对象。 创建一个 Map 对象,并将标题和日期作为键值对存储在其中。 将创建的 Map 对象添加到 List>(即 dataList)中。 这种方法使用了一个 List 来存储多个 Map 对象,每个 Map 对象都包含了标题和日期作为键值对。使用这种方法,你可以通过索引访问每个 Map 对象,并通过键来获取对应的值。 总的来说,使用自定义类的方式(即第一种方法)可以更加直观和类型安全地访问和操作属性,因为你可以直接调用对象的方法来获取属性。而使用 List> 的方式(即第二种方法)则更加灵活,因为你可以根据需要在 Map 中添加或移除任意键值对,但需要手动进行类型转换。 选择哪种方法取决于具体的需求和场景。如果每个元素都有固定的属性,并且需要进行属性的具体操作,那么使用自定义类的方式更合适。如果元素的属性不固定,或者只需要简单地存储和获取属性,那么使用 List> 的方式更方便。
    自定义泛型主要用于确定集合中元素的类型,而不是键值对的内容。它可以确保在编译期间进行类型检查,以防止插入不兼容的类型。但是,它不会限制元素的内容或键值对。
    
    例如,在一个自定义泛型的 List 中,你可以确保所有的元素都是 String 类型,但并不能保证它们是相同的键。每个元素仍然可以包含不同的键。
    
    同样地,Map 是一种键值对的集合,其中每个键都是唯一的。这意味着在 Map 中,键必须是唯一的,不能重复。自定义泛型并不能直接影响 Map 中的键。
    
    如果你想要确保 List 中每个对象都是相同的键,你需要在代码中进行逻辑判断和处理。如果你想要 Map 中对象可以有不同的键,你可以使用不同的键值对来构建 Map。
    
    所以,自定义泛型并不能直接保证 List 中每个对象都是相同的键,也不能保证 Map 中的对象可以有不同的键。它主要用于提供编译时期的类型安全性。对于集合中元素的内容或键值对的关系,需要通过其他逻辑来保证。

    4 要打印出形如 [ {自定义泛型},{自定义泛型},{自定义泛型}] 的格式,你可以使用自定义泛型的类或方法,并重写其 toString() 方法。

    @Override
        public String toString() {
            return "{date=" + date + ", title=" + title + "}";
        }

    5 完整代码

    public static void main(String[] args) {
        String url = "https://www.xxx.com";
        try {
    // 创建一个 List 来存储结果
          List
    articles = new ArrayList<>(); // 遍历每个
  • 元素并获取文字内容 for (Element liElement : liElements) { // 获取标题和日期的元素 Element titleElement = liElement.selectFirst("div.index_title__6wUnB"); Element dateElement = liElement.selectFirst("div.index_date__7jmiW"); // 获取标题和日期的文本内容 if (titleElement != null) { String title = titleElement.text(); String date = dateElement.text(); // 创建 Article 对象并添加到结果列表 Article article = new Article(title, date); articles.add(article); } } System.out.println(articles); }} catch (IOException e) { e.printStackTrace(); } static class Article { private String title; private String date; public Article(String title, String date) { this.title = title; this.date = date; } public String getTitle() { return title; } public String getDate() { return date; } @Override public String toString() { return "{date=" + date + ", title=" + title + "}"; } }
  • 5 自定义泛型使用Lombok --> 创建一个entity

    import lombok.Data;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class CustomGeneri{
        private String date;
        private String title;
    }

    你可能感兴趣的:(java基础,springboot,java,list,开发语言)