集合嵌套

集合嵌套并不是一个新的知识点,仅仅是集合内容又是集合,如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);
            }
        }
       
}
}

 



posted @ 2019-09-02 09:31  腊月出去玩  阅读(326)  评论(0编辑  收藏  举报