• 数组和集合详解及项目中的运用


    1.数组

    运用场景:可存基本数据类型和引用数据类型(对象)

    简单实例:

    String [ ] str =new String[3];
    str[0]="张三";
    str[1]="李四";
    str[2]="王五";

    // for形式遍历数组
    for(int i=0;i<str.length;i++){
    System.out.println("一维数组:for:"+str[i]);
    }

    // 增强for形式 s遍历所有数组:通用
    for(String s:str){
    System.out.println("一维数组增强:for:"+s);
    }

    项目运用:数组大小一般为动态的(JSon解析)

    JSONObject AutoTable=json.getJSONObject("AutoTable");//得到AutoTable
    JSONArray item2=AutoTable.getJSONArray("Item");//得到Item数组(里面存对象),下一层即为表对象

    /*--------------------------------------------2个map数组,一个存表名,一个存字段;存表名和存字段的都是集合map----------------------------------------------------------------------- */

    Map<String, String>[] mapsDetail=new Map[item2.size()]; //map类型的数组,存表中的具体字段及字段的值
    Map<String, String>[] mapsName=new Map[item2.size()]; //map类型的数组,存表名
    for(int i=0;i<item2.size();i++){ //item2为json数组,数组中为对象
    Map<String, String> paramDetail=new HashMap<>();
    Map iteamName=new HashMap(); //存表名称
    JSONObject jsonItem=(JSONObject)item2.get(i);
    String jsonname=jsonItem.getString("name");//得到表名称
    JSONArray jsonItemArray=jsonItem.getJSONArray("Item");//得到表整个字段
    log.info("--------------------------得到表名称"+jsonname);
    log.info("--------------------------得到表整个字段"+jsonItemArray);
    for(Iterator iterator=jsonItemArray.iterator();iterator.hasNext();){
    JSONObject jsonObject=(JSONObject)iterator.next();
    String name=jsonObject.getString("name");
    String value=jsonObject.getString("value");
    paramDetail.put(name, value);
    log.info("--------------------------name"+name);
    log.info("--------------------------name"+value);

    }
    iteamName.put(i, jsonname); //存表名称
    mapsName[i]=iteamName;//数组中存map,表名称
    mapsDetail[i]=paramDetail;//数组中存map,具体字段
    }

    方式2:增强for循环

    Map<String, String>[] mapsDetail=new Map[item2.size()]; //map类型的数组,存表中的具体字段及字段的值
    Map<String, String>[] mapsName=new Map[item2.size()]; //map类型的数组,存表名

    int i = 0;
    for(Object item:item2){
    Map<String, String> paramDetail=new HashMap<>();//存表具体字段
    Map iteamName=new HashMap(); //存表名称
    JSONObject jsonItem=(JSONObject)item;
    String jsonname=jsonItem.getString("name");//得到表名称
    JSONArray jsonItemArray=jsonItem.getJSONArray("Item");//得到表整个字段
    log.info("--------------------------得到表名称"+jsonname);
    log.info("--------------------------得到表整个字段"+jsonItemArray);
    for(Object jsonobject:jsonItemArray){
    String name=((JSONObject) jsonobject).getString("name");
    String value=((JSONObject) jsonobject).getString("value");
    paramDetail.put(name, value);
    log.info("--------------------------name"+name);
    log.info("--------------------------name"+value);
    }
    i++;
    iteamName.put(i, jsonname); //存表名称
    mapsName[i]=iteamName;//数组中存map,表名称
    mapsDetail[i]=paramDetail;//数组中存map,具体字段
    }

    2.hashmap:映射,key不可重复,重复value会被覆盖,上面代码已经用到。

    3.hashset:仅仅是存储不重复的元素,相当于简化版的HashMap,只是包含HashMap中的key而已

    项目实例:仅仅存储统一用户的不同附件名称

    //根据需要补齐的附件类型
    String fcode = "";
    HashSet<String> set = new HashSet<>();//存放材料类型
    HashSet<String> zw_set = new HashSet<>();//存放材料唯一id

    for (int i = 0; i < suffInfoList.size(); i++) {
    StuffInfoVO stuffInfoVO = suffInfoList.get(i); //得到附件对象
    String stuffName = stuffInfoVO.getStuffName(); //材料名称(必填)
    String stuffUniId = stuffInfoVO.getStuffUniId(); //事项中心办件材料唯一ID
    zw_set.add(stuffUniId);//存放材料唯一id
    if (stuffName.contains("《浙江省社会救助申请表》(含授权承诺书)")) {
    fcode = "file_sqbg";
    }

    if (stuffName.contains("身份证")) {
    fcode = "file_sfz";
    }

    log.info("------------------------------图片fcode" + fcode);
    set.add(fcode); //存放材料类型
    }

    for (String stuffUniId : zw_set) {
    jdbcTemplate.executeUpdate(delete_suffInfoList, new Object[]{
    projId, stuffUniId
    });
    }

    for (String fupcode : set) {
    jdbcTemplate.executeUpdate(DELETE_MZDB_SQL, new Object[]{PK_SR_MAIN, fupcode}); //通过主键和图片类型删除对应的附件信息
    }

    4. HashMap、Hashtable、HashSet三种hash集合的区别

    Hashtable是线程安全;HashMap、HashSet线程不安全,HashMap映射,HashSet去重

     

  • 相关阅读:
    泛型自限定
    java 泛型类转型
    迷茫
    spring boot 连接mysql 错误The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one
    mysql8.0.14 安装
    泛型通配符
    java 泛型数组
    java FTP上传文件
    spring location设置本地路径
    套接口定义
  • 原文地址:https://www.cnblogs.com/tongcc/p/11226108.html
Copyright © 2020-2023  润新知