一个基本概念:
数组可以保存基本类型的值和对象,而集合只可以保存对象,实际上说具体点应该是数组和集合都是保存的对象的引用变量,而不是具体的内存对象.
下面一个例子加以说明:
import java.util.ArrayList; public class Test { static class Person{ public Person(String n){ name = n; } @Override public String toString() { return name; } public String name; } public static void main(String[] args) { System.out.println("test"); Person p = new Person("aa"); Person p1 = new Person("bb"); ArrayList<Person> personList = new ArrayList<Test.Person>(); personList.add(p); personList.add(p1); for (Person person : personList) { System.out.println(person); //输出 aa bb } p.name = "cc"; for (Person person : personList) { System.out.println(person);//输出 cc bb } } }
上面的这个例子我们一定要明确,因为JAVA的集合是保存的对象的引用变量,而不是具体内存对象,但是C++的STL容器就不一样了,
C++的STL 容器是在增加对象到容器时候,容器时会重新分配内存的来保存增加对象,我们通过下面的例子来说明C++容器内存相关:
#include <iostream> #include <list> #include <iterator> #include <string> using namespace std; class Person { public: Person(string n):mName(n) { } public: string mName; }; int main() { Person p("aa"); Person p1("bb"); list<Person> personList; personList.push_back(p); personList.push_back(p1); list<Person>::iterator it ; for(it = personList.begin();it != personList.end();it++){ cout << (*it).mName << endl; //aa bb } p.mName = "cc"; for(it = personList.begin();it != personList.end();it++){ cout << (*it).mName << endl;//aa bb } return 0; }