[实验任务一]: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. 注意编程规范。