一、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);

目前遇到的就是这些,后期还会继续补充。

也希望能为大家带来一定帮助!