11.18實驗18:迭代器模式

發表於2024-11-19

[實驗任務一]JAVAC++常見資料結構迭代器的使用

1305班共44名同學,每名同學都有姓名,學號和年齡等屬性,分別使用JAVA內建迭代器和C++中標準模板庫(STL)實現對同學資訊的遍歷,要求按照學號從小到大和從大到小兩種次序輸出學生資訊。

實驗要求:

1. 蒐集並掌握JAVAC++中常見的資料結構和迭代器的使用方法,例如,vector, list, mapset等;

好的,下面是關於JavaC++中常見資料結構(如`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. 注意程式設計規範。

相關文章