一、ArrayList
ArrayList类是List接口的一个实现类。是在java.util.List包下
像这样的:
//存储三名学生基本信息
[{name="zhangsan",age=15,gender="男"},{name="lisi",age=20,gender="女"},{name="wangwu",age=18},gender="男"]
通常都会结合Javabean对象,创建形如
List<Student> list = new ArrayList<>();
//或者
ArrayList<Student> list = new ArrayList<>();
区别:涉及java上转型对象的使用,可以回顾一下java多态的设计理念与面向接口的编程思想。
所以我们常用第一种写法。
然后对list进行一些基本操作。
对ArrayList对象的一些基本操作:
1、添加一个对象
Student student = new Student();
student.setName("aaa");
student.setAge(12);
student.setGender("女");
//添加学生到集合中
list.add(student);
输出list:
[Student{name='aaa', age=12, gender='女'}]
2、 添加一个集合
List<Student> li = new ArrayList<>();
li.add(new Student("bbb","20","男"));
li.add(new Student("ccc","28","女"));
//将 li 添加到 list 集合末尾
list.addAll(li);
3、删除一个对象
for (Student s : list) {
if("aaa".equals(s.getName()))
list.remove(s);
System.out.println("删除成功");
}
java.util.ConcurrentModificationException 异常。
//方式一
Iterator<Student> it = list.iterator();
while (it.hasNext()) {
Student s = it.next();
if ("bbb".equals(s.getName())) {
list.remove(s);
}
}
//方式二
Iterator<Student> it = list.iterator();
for (Student s :list){
Student s2 = it.next();
if ("bbb".equals(s2.getName())) {
list.remove(s);
}
}
原因在于Iterator 中的next()方法实现时其中会有一个属性(modCount)会判断是否被修改过,修改过会返回false,从而就抛出异常。是不是很疑惑,修改方法不让修改?没错,就是不让不想被修改的集合被修改用的。起到一种保护作用。
解决办法:
(1)可以使用Iterator的remove方法,该方法会删除当前迭代对象的同时,维护索引的一致性(上面删除对象后会出想索引不一致的问题)
Iterator<Student> it = list.iterator();
while (it.hasNext()) {
Student s = it.next();
if ("bbb".equals(s.getName())) {
it.remove();
}
}
(2)这是我从另一篇文章看到,尝试后确实可以解决问题,那就是采用倒序遍历的方式进行查找并删除
for (int i=myGoods.size()-1;i>=0;i--) {
k--;
if(k==index){
myGoods.remove(k);
}
}
4、更新集合
//将索引为0的学生对象名字修改为“ddd”
list.set(0,new Student("ddd",12,"女"));
5、根据索引获得指定元素
int index = 1;
Student st = list.get(index);
System.out.println(st);
二、JSONArray
在前端接受后端传来的数据往往都是以JSON的形式,而 ArrayList 类型的数据会转化为JSONList,进而在前端进行处理。你以为就这样,前端同样会以这样的形式发送到后端,可以转化为java对象,从而利用java类中的相应方法处理。总之,JSONArray是一座很好的装载数据的“桥梁”。
首先认识一下:JSONArray
[{"id":"1001","name":"苹果","price":"12"},{"id":"1002","name":"香蕉","price":"10"},{"id":"1003","name":"橘子","price":"8"}]
它是一个有序的值序列,它的值可以为这些类型,比如Boolean,Number,String,JSONArray,JSONObject, 或 JSONNull object
相关操作:
(1)将一个ArrayList对象转化为JSONArray对象
JSONArray jsonArray = JSONArray.fromObject(list);
(2)将一个JSONArray对象转化为String
jsonArray.toString();//就可以将JSONArray对象直接转化
(3)String转JSONArray
在后端:
String str = "[
{'id':'1004', 'name':"草莓",'price':48}," +
"{'id':'1005', 'name':"西瓜",'price':5}," +
"{'id':'1006', 'name':"橙子",'price':20}
]";
JSONArray jsonArray = JSONArray.fromObject(str);
System.out.println(jsonArray.toString());//也可以直接输出jsonArray
在前端js里:利用ajax技术将字符串转为JSONArray类型数据
//后端传来的字符串解析成JSONArray类型
let val = eval("("+this.responseText+")");
let result = "";
//遍历的json
for (let i=0;i<val.length;i++){
let temp = val[i];
for (let key in temp){
result = result + key +":"+temp[key];
result = result+"<br/>";
}
}
(4)JSONArray转JSONObject
JSONObject job = jsonArray.getJSONObject(i);
(5)利用Fastjson实现JOSN 和java对象之间的转化:(fastjson是一个java库,需要导入相应jar包,或是依赖才可以使用)。
JSON 字符串转换为 Java 对象
Good mygood = JSON.parseObject(jsonObject, Good.class);
将 Java 对象转换为 JSON 格式
String json= JSON.toJSONString(list);
目前遇到的就是这些,后期还会继续补充。
也希望能为大家带来一定帮助!