菜鸟生成记(85)
Java ArrayList和Vector集合使用方法大致相同,就不列举Vector了
/*************ArrayList错误嵌套使用方法***************/
ArrayList<ArrayList<Integer>> arr=new ArrayList<>();
ArrayList<Integer> t=new ArrayList<>();
t.add(1);t.add(1);t.add(1);
t.clear();//t集合清空
arr.add(t);//错误使用方法,向集合arr中只添加一个集合时,这是对的;两次或多次添加时就会出错;
t.add(2);t.add(2);t.add(2);
arr.add(t);//错误使用方法
System.out.println(arr.toString());//输出[[2,2,2],[2,2,2]]
/*
错误原因:集合arr在创建之后,只是一个空指针集合(可以指向ArrayList<Integer>类型的空指针)
第一次arr.add(t)意为:集合arr的第一个指针指向t(集合t中的元素为[1,1,1]);
t.clear():t集合清空;
t.add(2);t.add(2);t.add(2):t集合元素变为[2,2,2];
同时,第一个指针的指向的集合内容也变为[2,2,2];
第二次arr.add(t)意为:集合arr的第二个指针指向t(集合t中的元素为[2,2,2]);
最后输出arr集合
[[2,2,2],[2,2,2]]
集合arr中,储存的全是最后一次t集合的元素
*/
/*************ArrayList正确嵌套使用方法***************/
ArrayList<ArrayList<Integer>> arr1=new ArrayList<>();
ArrayList<Integer> t1=new ArrayList<>();
t1.add(1);t1.add(1);t1.add(1);
arr1.add(new ArrayList<>(t1));//正确使用方法,用t1集合的元素创建一块新内存,然后arr的指针指向这块内存
t1.clear();//t1集合清空
t1.add(2);t1.add(2);t1.add(2);
arr1.add(new ArrayList<>(t1));//正确使用方法,用t1集合的元素创建一块新内存,然后arr的指针指向这块内存
System.out.println(arr1.toString());//输出[[1, 1, 1], [2, 2, 2]]
C++ Vector
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<vector<int> >arr;//C++集合不是空指针集合,变量储存集合
vector<int> t;
t.push_back(1),t.push_back(1),t.push_back(1);
arr.push_back(t);//默认开辟一块新内存,将t集合的元素储存在里面
t.clear();//t集合清空
t.push_back(2),t.push_back(2),t.push_back(2);
arr.push_back(t);//默认开辟一块新内存,将t集合的元素储存在里面
for(int i=0;i<arr.size();i++){
for(int j=0;j<arr[i].size();j++){
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
/*
输出
1 1 1
2 2 2
*/
return 0;
}