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

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去重

 

原文地址:https://www.cnblogs.com/tongcc/p/11226108.html