[實驗任務一]: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. 注意程式設計規範。