首页 > 其他分享 >11.18实验18:迭代器模式

11.18实验18:迭代器模式

时间:2024-11-19 14:20:15浏览次数:1  
标签:std java 11.18 迭代 18 list add Student

[实验任务一]:JAVA和C++常见数据结构迭代器的使用

信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。

实验要求:

1. 搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如,vector, list, map和set等;

好的,下面是关于Java和C++中常见数据结构(如`vector`、`list`、`map`和`set`)及其迭代器使用方法的详细介绍。

 

Java中的数据结构和迭代器

1. `ArrayList`(类似于C++的`vector`)

 

`ArrayList`是一个动态数组,可以根据需要调整大小。

 

java

import java.util.ArrayList;

import java.util.Iterator;

 

public class ArrayListExample {

    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<>();

        list.add("Apple");

        list.add("Banana");

        list.add("Cherry");

 

        // 使用迭代器遍历

        Iterator<String> iterator = list.iterator();

        while (iterator.hasNext()) {

            System.out.println(iterator.next());

        }

    }

}

 

 

2. `LinkedList`(类似于C++的`list`)

 

`LinkedList`是一个双向链表,适合频繁插入和删除操作。

 

java

import java.util.LinkedList;

import java.util.ListIterator;

 

public class LinkedListExample {

    public static void main(String[] args) {

        LinkedList<String> list = new LinkedList<>();

        list.add("Apple");

        list.add("Banana");

        list.add("Cherry");

 

        // 使用ListIterator遍历

        ListIterator<String> listIterator = list.listIterator();

        while (listIterator.hasNext()) {

            System.out.println(listIterator.next());

        }

    }

}

 

3. `HashMap`(类似于C++的`map`)

 

`HashMap`是一个基于哈希表的键值对存储结构。

 

java

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

 

public class HashMapExample {

    public static void main(String[] args) {

        HashMap<String, Integer> map = new HashMap<>();

        map.put("Apple", 1);

        map.put("Banana", 2);

        map.put("Cherry", 3);

 

        // 使用迭代器遍历

        Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();

        while (iterator.hasNext()) {

            Map.Entry<String, Integer> entry = iterator.next();

            System.out.println(entry.getKey() + ": " + entry.getValue());

        }

    }

}

 

4. `HashSet`(类似于C++的`set`)

 

`HashSet`是一个不允许重复元素的集合。

 

java

import java.util.HashSet;

import java.util.Iterator;

 

public class HashSetExample {

    public static void main(String[] args) {

        HashSet<String> set = new HashSet<>();

        set.add("Apple");

        set.add("Banana");

        set.add("Cherry");

 

        // 使用迭代器遍历

        Iterator<String> iterator = set.iterator();

        while (iterator.hasNext()) {

            System.out.println(iterator.next());

        }

    }

}

 

 C++中的数据结构和迭代器

1. `std::vector`

 

`std::vector`是一个动态数组,支持快速随机访问。

 

cpp

#include <iostream>

#include <vector>

 

int main() {

    std::vector<std::string> vec = {"Apple", "Banana", "Cherry"};

 

    // 使用迭代器遍历

    for (auto it = vec.begin(); it != vec.end(); ++it) {

        std::cout << *it << std::endl;

    }

 

    return 0;

}

 

2. `std::list`

 

`std::list`是一个双向链表,适合频繁插入和删除操作。

 

cpp

#include <iostream>

#include <list>

 

int main() {

    std::list<std::string> lst = {"Apple", "Banana", "Cherry"};

 

    // 使用迭代器遍历

    for (auto it = lst.begin(); it != lst.end(); ++it) {

        std::cout << *it << std::endl;

    }

 

    return 0;

}

 

3. `std::map`

 

`std::map`是一个基于红黑树的键值对存储结构,自动排序。

 

cpp

#include <iostream>

#include <map>

 

int main() {

    std::map<std::string, int> m;

    m["Apple"] = 1;

    m["Banana"] = 2;

    m["Cherry"] = 3;

 

    // 使用迭代器遍历

    for (auto it = m.begin(); it != m.end(); ++it) {

        std::cout << it->first << ": " << it->second << std::endl;

    }

 

    return 0;

}

 

4. `std::set`

 

`std::set`是一个不允许重复元素的集合,自动排序。

 

cpp

#include <iostream>

#include <set>

 

int main() {

    std::set<std::string> s = {"Apple", "Banana", "Cherry"};

 

    // 使用迭代器遍历

    for (auto it = s.begin(); it != s.end(); ++it) {

        std::cout << *it << std::endl;

    }

 

    return 0;

}

Java使用`ArrayList`、`LinkedList`、`HashMap`和`HashSet`,而C++使用`std::vector`、`std::list`、`std::map`和`std::set`。每种数据结构都有其特定的用途和性能特点,选择合适的数据结构可以提高程序的效率和可读性。

2. 提交源代码;

package rjsj.no18;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Iterator;

import java.util.List;

class Student implements Comparable<Student>{

    private String name;

    private int sid;

    private int age;

    public Student(String name, int sid, int age) {

        this.name = name;

        this.sid = sid;

        this.age = age;

    }

    @Override

    public String toString() {

        return "Student{" +

                "姓名='" + name + '\'' +

                ", 学号=" + sid +

                ", 年龄=" + age +

                '}';

    }

    @Override

    public int compareTo(Student o) {

        if (this.sid > o.sid){

            return -1;

        } else if (this.sid < o.sid){

            return 1;

        } else {

            return 0;

        }

    }

}

class IteratorDemo {

    public static void main(String[] args) {

        Student student1 = new Student("张三",20193885,21);

        Student student2 = new Student("李四",20201456,20);

        Student student3 = new Student("王五",20184655,23);

        Student student4 = new Student("赵六",20191242,22);

        Student student5 = new Student("李七",20213256,19);

        List<Student> list = new ArrayList<Student>();

        list.add(student1);list.add(student2);list.add(student3);

        list.add(student4);list.add(student5);

        Collections.sort(list);

        System.out.println("按学号排序输出:");

        Iterator i = list.iterator();

        while (i.hasNext()){

            System.out.println(i.next().toString());

        }

    }

}

 

3. 注意编程规范。

 

 

标签:std,java,11.18,迭代,18,list,add,Student
From: https://www.cnblogs.com/yindantong/p/18554769

相关文章

  • 国标GB28181公网直播LiteGBS国标GB28181摄像机接入:浅述ONVIF、PSIA、HDcctv与GB28181
    LiteGBS国标GB28181摄像机接入视频能力丰富,部署灵活,既能作为业务平台使用,也能作为安防监控视频能力层被业务管理平台调用。国标GB28181视频LiteGBS国标GB28181公网直播平台可提供流媒体接入、处理、转发等服务,支持内网、公网的安防视频监控设备通过国标GBT28181协议进行视频监控直......
  • 国标GB28181公网平台LiteGBS国标GB28181设备管理软件在视频监控系统中的应用
    LiteGBS国标GB28181设备管理软件在视频监控系统中的应用非常广泛,它为视频监控设备的联网提供了一套标准化的通信协议,使得不同品牌和型号的监控设备能够在同一网络中协同工作。以下是GB28181协议在视频监控系统中的应用优势和具体实现:跨区域视频监控联网:GB28181协议支持城市间或省......
  • 国标GB28181视频平台LiteGBS国标GB28181网页直播平台在视频监控系统中的应用意义
    LiteGBS国标GB28181网页直播平台可以通过优化网络传输和处理流程,实现了低延时的视频传输。特别是在“云、边、端”架构中,它能够显著减少复杂网络中的各种路由转发和设备处理时延,获取更低延时的视频流。同时,平台支持H.264/H.265视频压缩技术,确保在不同网络环境下传输高清视频,保障视......
  • 国标GB28181摄像机接入LiteGBS国标GB28181公网直播云平台实现实时视频监控
    LiteGBS国标GB28181网页直播平台,依托国标GB28181协议,构建了一个功能全面的安防视频流媒体平台。该平台涵盖了实时监控直播、录像回放、语音对讲、云存储、告警通知及平台级联等视频功能,部署简便且具备良好的可扩展性。同时,LiteGBS支持将接入的视频流以RTSP、RTMP、FLV、HLS、WebRT......
  • 国标GB28181视频平台EasyCVR大华设备视频平台EasyCVR平台如何接入摄像机
    在现代视频监控系统中,兼容性和灵活性是关键要素,尤其是在多品牌、多协议的环境中。EasyCVR作为一个强大的视频监控管理平台,以其广泛的兼容性和多样化的接入方式,为用户提供了一个集中管理不同品牌和协议摄像机的解决方案。以下是国标GB28181视频平台EasyCVR支持的几种常见摄像机接入......
  • UOJ918 【UR #28】偷吃蛋糕 题解
    题目描述\(n\)层蛋糕,第\(i\)层大小\(c_i\),保证\(c_i\)单调不增。初始你有第\(1\)层蛋糕,然后重复以下操作,直至没有蛋糕:吃掉最大的一层蛋糕,记其大小为\(x\)。如果还有至少\(x\)层蛋糕没有给你,主办方会按编号升序给你接下来的\(x\)层蛋糕。如果只有\(y\)层蛋......
  • 小米AX1800 开启ssh
    用旧固件降级固件开启SSH1.方案一浏览器控制台执行functiongetSTOK(){letmatch=location.href.match(/;stok=(.*?)\//);if(!match){returnnull;}returnmatch[1];}functionexecute(stok,command){command=encodeURICompo......
  • 【vue】项目迭代部署后 自动清除浏览器缓存
    前言:vue项目打包部署上线后,因浏览器缓存问题,导致用户访问的依旧是上个迭代批次的旧资源,需要用户手动清除缓存才能更新至最新版本,影响用户体验。解决方法:html根文件添加以下标签<metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"con......
  • Redis性能优化的18招
    前言Redis在我们的日常开发工作中,使用频率非常高,已经变成了必不可少的技术之一。Redis的使用场景也很多。比如:保存用户登录态,做限流,做分布式锁,做缓存提升数据访问速度等等。那么问题来了,Redis的性能要如何优化?为了充分发挥Redis的性能,这篇文章跟大家一起聊聊Redis性能优化的1......
  • 【2024-11-18】连岳摘抄
    20:00爱别人就是一种个人保险或投资,它是会得到偿还的。可是绝大多数人都很近视,看不出这种长期投资的价值。                                                 ——冯友兰......