能解决的问题:

  1. 数组的长度是初始创建就确定下来的,如果需要一个容量能变化的“数组”的时候,我们就用集合
  2. 处理映射关系(键值对、key-value)

 

概述:

  1. 既然有了数组为什么还需要集合? 
    1.数组长度不可变化,当需要保存数量变化的数据时数组就不太适用了 
    2.不方便体现映射关系(键值对)
  2. java集合分为两大类 Collection和Map,而Collection又分Set和List,这就是我们熟知的java3大集合类 Map、Set、List
  3. Map、Set、List概述(区别) 
    List:有序的(这个序指的是序号的序,而不是顺序的序),内容可重复的 (长度可变的数组) 
    Set:无序的,不可重复的 (一个容器:大筐) 
    Map:键值对,键不可重复 (键值对、key-value)
  4. 集合不能保存基本数据类型,如果程序中试图保存基本数据类型,Java会自动将其封包成为对应的封装类(例如:int -- Integer)
  5. 集合的层级结构图(待续)

 

程序演示: 放大

  1. package com.cxy.collection;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8.   
  9. public class JiHeTest  
  10. {  
  11.     /** java集合概述 
  12.      */  
  13.     public static void main(String[] args)  
  14.     {  
  15.         //假设幼儿园一班有3个小朋友  
  16.         String[] children={"小明","小红","小白"};  
  17.         System.out.println("一班有:"+children.length+"个小朋友");  
  18.         //现在小黑要进入一班! 没有地方了 因为 幼儿园一班(children数组)只有3个位置  
  19.         try  
  20.         {  
  21.             children[3]="小黑";  //这里会出现数组越界异常,因为数组长度是3,不可变!!  
  22.         }catch(Exception e)  
  23.         {  
  24.             System.out.println("没有位置容下第4个小朋友");  
  25.             System.out.println("==================");  
  26.         }  
  27.           
  28.         //幼儿园一班每个小朋友对应的成绩  
  29.         int[] chengji={100,99,98};  
  30.         for(int i=0;i<children.length;i++)  
  31.         {  
  32.             System.out.println(children[i] + "成绩:" + chengji[i]);  
  33.         }  
  34.         //这样看似好像没什么问题,但是如果数组存储的是大学生信息呢?上万的数据用两个数组对应同序号的数据,难免会出错  
  35.         //从上面的例子来看 用两个数组表示映射关系 显然不合适(不直观,易出错)  
  36.         System.out.println("==================");  
  37.           
  38.         //使用集合解决问题  
  39.         List<String> childrenList=new ArrayList<String>();  
  40.         childrenList.add("小明");  
  41.         childrenList.add("小红");  
  42.         childrenList.add("小白");  
  43.         childrenList.add("小黑");  
  44.           
  45.         for(int i=0;i<childrenList.size();i++)  
  46.         {  
  47.             System.out.print(childrenList.get(i)+"  ");  
  48.         }  
  49.         //通过打印可以看出 小黑终于进入了幼儿园一班  
  50.         System.out.println("");  //保持打印格式 无实际用处  
  51.         System.out.println("==================");  
  52.           
  53.         Map<String,Integer> chengjiMap=new HashMap<>();   
  54.         //注意这里的值是Integer对象,不能是int 因为集合只能是对象不能是基本数据类型。  
  55.         chengjiMap.put("小明"100); //这里之所以能写成基本数据类型是因为他自己封包成Integer对象。  
  56.         chengjiMap.put("小红"99);  
  57.         chengjiMap.put("小白"98);  
  58.         //这样就能很清晰的看到成绩表的结构了,下面我们来遍历一下  
  59.         for(String one:chengjiMap.keySet())  
  60.         {  
  61.             System.out.println(one+"成绩:"+chengjiMap.get(one));  
  62.         }  
  63.         //通过打印结果可以看到map的输出是无序的  
  64.     }  
  65. }