集合嵌套
集合嵌套并不是一个新的知识点,仅仅是集合内容又是集合,如Collection集合嵌套、Collection集合与Map集合相互嵌套、Map集合嵌套。
l ArrayList嵌套 ArrayList
ArrayList< ArrayList<String>>
Collection< ArrayList<Integer>>
l Map嵌套 ArrayList
HashMap<String, ArrayList<Person>>
ArrayList< HashMap<String, String>>
l Map集合嵌套
HashMap<String, HashMap<String,String>>
HashMap<String, HashMap<Person,String>>
集合嵌套遍历:
package com.oracle.xunhuan; import java.util.HashMap; import java.util.Iterator; import java.util.Set; import com.oracle.Demo01.Person; public class workf_1 { public static void main(String[] args) { //外内 HashMap<String,HashMap<Person,String>> k =new HashMap<String,HashMap<Person,String>>(); //添加数据 先添加值 HashMap<Person,String> n1=new HashMap<Person,String> (); HashMap<Person,String> n2=new HashMap<Person,String> (); n1.put(new Person("鸡肉卷",25),"1"); n1.put(new Person("咖喱鸡",14),"2"); n2.put(new Person("汉堡王",23),"3"); n2.put(new Person("牛肉包",10), "4"); //添加数据 添加键,值。 k.put("鸡肉",n1); k.put("汉堡",n2); //遍历 keyset+增强for //获取最外层key Set<String> ka=k.keySet(); for(String s:ka) { //用外层key获取内层的集合 String keyw=s; //利用外层的key值,获取到里面的自定义集合 HashMap<Person,String> valuen=k.get(keyw); //获取内层的key值 Set<Person> wa=valuen.keySet(); for(Person t:wa) { System.out.println(keyw+".."+t+"."+valuen.get(t)); } } /*迭代器循环打印*/ /*获取集合中的元素 * iteger循环遍历*/ //1.获取外层key值循环打印2.利用外层key值得到value(内层集合)3. //1.获取外层key值,迭代器 循环打印 Set<String> key2=k.keySet(); //迭代器 Iterator<String> ded=key2.iterator(); //循环打印 while(ded.hasNext()) { //得到每一个key值 String key3=ded.next(); //利用key值获得 value的内集合 HashMap<Person,String> value2=k.get(key3); //获得 内集合的key值 Set<Person> key4=value2.keySet(); /*循环遍历,获得迭代器*/ Iterator<Person> ded1=key4.iterator(); /*循环打印*/ while(ded1.hasNext()) { //得到内集合的每个key值 Person nkey=ded1.next(); System.out.println(key3+"... "+nkey+"..."+value2.get(nkey)); } } /* 增强FOR+entry entry键值是一对对的。不在分离*/ //获取大集合中的key与value值 Set< HashMap.Entry<String,HashMap<Person,String>>>sr=k.entrySet(); //循环得到 key,value for( HashMap.Entry<String,HashMap<Person,String>> p:sr) { /*获得key值*/ String entry_key=p.getKey(); /*获得value值*/ HashMap<Person,String> entry_value=p.getValue(); /*获得内层集合的key,value值*/ Set<HashMap.Entry<Person,String>> sc=entry_value.entrySet(); for(HashMap.Entry<Person,String> c:sc) { Person entry_key2=c.getKey(); String entry_value2=c.getValue(); System.out.println(entry_key+". ."+entry_key2+".."+entry_value2); } } /*迭代器+entry遍历*/ /*获取大集合的key值*/ Set< HashMap.Entry<String,HashMap<Person,String>>>st=k.entrySet(); /*获取大集合的迭代器*/ Iterator<HashMap.Entry<String,HashMap<Person,String>>> std=st.iterator(); while(std.hasNext()) { //获得大集合的key值 HashMap.Entry<String,HashMap<Person,String>> Iterator_ded=std.next(); //提取key值 String Iterator_key= Iterator_ded.getKey(); //提取value值 HashMap<Person,String> Iterator_value=Iterator_ded.getValue(); /*利用大集合的key值获得内层集合的key,value值*/ Set<HashMap.Entry<Person,String>> stc=Iterator_value.entrySet(); /*获取内层集合的迭代器*/ Iterator<HashMap.Entry<Person,String>> nd=stc.iterator(); while(nd.hasNext()) { //获得内层的每个key值 HashMap.Entry<Person,String> Iterator_nd=nd.next(); //提取内层的key值 Person nckey=Iterator_nd.getKey(); //提取能蹭的value值 String ncvalue=Iterator_nd.getValue(); System.out.println(Iterator_key+"__"+nckey+"--"+ncvalue); } } } }