博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java列表
阅读量:4984 次
发布时间:2019-06-12

本文共 14186 字,大约阅读时间需要 47 分钟。

Java列表踩过的坑

其中subList是RandomAccessSubList,不是序列化的列表,不可以加入tair。

 

加入tair测试代码

@Autowired    private CacheManager cacheManager;    @Test    public void listTest() {        ArrayList arrayList = new ArrayList();        arrayList.add(1);        arrayList.add(2);        arrayList.add(3);        arrayList.add("我是字符串");        //正确        boolean dev_testkey = cacheManager.addToTair("dev_testkey", arrayList, 60 * 30);        try {            //报错            ArrayList
list00 = (ArrayList
)arrayList.subList(1, 2); dev_testkey = cacheManager.addToTair("dev_testkey", list00, 60 * 30); }catch (Exception e){ System.out.println("error"); } try { //报错 ArrayList list0 = (ArrayList)arrayList.subList(0, 1); dev_testkey = cacheManager.addToTair("dev_testkey", list0, 60 * 30); }catch (Exception e){ System.out.println("error"); } try { //报错 List list1 = arrayList.subList(0, 1); dev_testkey = cacheManager.addToTair("dev_testkey", (ArrayList
)list1, 60 * 30); }catch (Exception e){ System.out.println("error"); } List list = new ArrayList(); list.add(1); list.add("我是字符串"); //正确 dev_testkey = cacheManager.addToTair("dev_testkey", arrayList, 60 * 30); String tags = "1,2,3,4,5"; List
tagslist = Arrays.asList(tags.split(",")); ArrayList
okList = new ArrayList
(Arrays.asList(tags.split(","))); try { //报错 dev_testkey = cacheManager.addToTair("dev_testkey", (ArrayList
)tagslist, 60 * 30); }catch (Exception e){ System.out.println("error"); } //正确 dev_testkey = cacheManager.addToTair("dev_testkey", okList, 60 * 30); try { //报错 List
okSubList = tagslist.subList(0, 3); dev_testkey = cacheManager.addToTair("dev_testkey", (ArrayList
)okSubList, 60 * 30); }catch (Exception e){ System.out.println("error"); } try { //报错 dev_testkey = cacheManager.addToTair("dev_testkey3", (ArrayList
)tagslist, 60 * 30); }catch (Exception e){ System.out.println("error"); } List
subList = tagslist.subList(0, 3); try { //报错 dev_testkey = cacheManager.addToTair("dev_testkey4", (ArrayList
)subList, 60 * 30); }catch (Exception e){ System.out.println("error"); } }

  

Java中怎样把数组转换为ArrayList?

方法1、较好ArrayList
arrayList = new ArrayList
(Arrays.asList(array));方法2、List
list = Arrays.asList(array);方法3、Element[] array = {new Element(1), new Element(2)};List
list = new ArrayList
(array.length);Collections.addAll(list, array);

  方法二的方式不太好,因为 asList() 返回的列表的大小是固定的。事实上,返回的列表不是 java.util.ArrayList ,而是定义在 java.util.Arrays 中一个私有静态类。我们知道 ArrayList 的实现本质上是一个数组,而 asList() 返回的列表是由原始数组支持的固定大小的列表。这种情况下,如果添加或删除列表中的元素,程序会抛出异常 UnsupportedOperationException 。

 

代码示例

List
arrays_arrayList = Arrays.asList("王利虎","张三","李四","李四"); //是Arrays下的私有静态类ArrayList,没有序列化 List
randomAccessSubList = arrays_arrayList.subList(0, 1); //是RandomAccessSubList,没有序列化 ArrayList list_0 = new ArrayList(); list_0.add(1); list_0.add("xxx"); List
arrayList_subList = list_0.subList(0, 1); //是ArrayList下的私有静态类SubList,没有序列化
ArrayList
error = (ArrayList
) arrays_arrayList; //出错

  

 

 

彻底删除列表中的一个元素

//想把列表里全部的1删除 使用removeAll        ArrayList arrayList = new ArrayList();        arrayList.add(1);        arrayList.add(2);        arrayList.add(3);        arrayList.add(1);        arrayList.add(1);        ArrayList arrayList2 = new ArrayList();        arrayList2.add(1);        arrayList.removeAll(arrayList2);

  

1、ArrayList

ArrayList是大小可变列表的实现,允许任何数据加入

ArrayList arrayList = new ArrayList();
public boolean add(E e);
代码示例

/**     *  arrayListTest     */    public static void arrayListTest(){        ArrayList list = new ArrayList();        list.add(1);//int        list.add("我是字符串");        list.add(2L);//long        System.out.println("list:" + list);        ArrayList list1 = new ArrayList();        list1.add(3);        list1.add(0, 4);        System.out.println("list1:" + list1);        //将list2里面的数据,全部放到list1指定位置的后面        list.add(2, list1);        System.out.println("list:" + list);        // 清空列表,删除里面所有的数据        list1.clear();        // 判断列表里是否包含某个数据        boolean found = list.contains(2l);        System.out.println("found:"+found);        ArrayList list2 = new ArrayList();        list2.add(1);        list2.add("我是字符串");        // 判断列表是否包含了另一个集合的所有数据        boolean containsAll = list.containsAll(list2);        System.out.println("containsAll:"+containsAll);        // 得到数据在列表中的位置,第一次出现        int index = list.indexOf(1);        System.out.println("index:"+index);        // 删除某个位置的数据        list.remove(3);        System.out.println("list:" + list);        // 删除指定对象的第一个出现的位置        // 注意,如果是整数,要区分其与remove(int)的区别        // 建议用 remove(new Integer(123)); 来删除数据对象        list.remove(new Integer(123));        System.out.println("list:" + list);        // 删除列表里在另一个集合里存在的数据        ArrayList list3 = new ArrayList();        list3.add(1);        list3.add("我是字符串");        list.removeAll(list3);        System.out.println("list:" + list);        // 只保留在另一个集合里存在的数据,等于交集        ArrayList list4 = new ArrayList();        list4.add(2L);        list.retainAll(list4);        System.out.println("list:" + list);        // 替换指定位置的数据        list.add(1);        list.add(2);        list.add(3);        list.add(4);        list.add(5);        list.add(6);        list.add(7);        list.add(8);        list.set(0, 999);        System.out.println("list:" + list);        // 列表数据的数量        int size = list.size();        System.out.println("size:"+size);        // 得到一个子数组,包含前缀,不包含后缀        List subList = list.subList(2, 5);        System.out.println("subList:" + subList);        // 将集合转化为数组        Object[] objs = list.toArray();        // 将集合转化为指定格式的数组        // 比如集合里保存的都是String  可能会报错        String[] objs2 = (String[]) list.toArray(new String[0]);        // 列表的迭代器操作        // 顺序严格按照列表的保存的顺序        Iterator it = list.iterator();        // 列表的另一个迭代器        ListIterator listIT = list.listIterator();        //列表的另一个迭代器,可以指定起始位置        ListIterator listIT2 = list.listIterator(3);    }

  

  

2、Vector

Vector同样是大小可变列表的实现,与ArrayList不同的是,Vector的add相关方法是同步的。

Vector vector = new Vector();
public synchronized boolean add(E e);
代码示例

/**     *  vectorTest     */    public static void vectorTest(){        Vector list = new Vector();        list.add(1);//int        list.add("我是字符串");        list.add(2L);//long        System.out.println("list:" + list);        Vector list1 = new Vector();        list1.add(3);        list1.add(0, 4);        System.out.println("list1:" + list1);        //将list2里面的数据,全部放到list1指定位置的后面        list.add(2, list1);        System.out.println("list:" + list);        // 清空列表,删除里面所有的数据        list1.clear();        // 判断列表里是否包含某个数据        boolean found = list.contains(2l);        System.out.println("found:"+found);        Vector list2 = new Vector();        list2.add(1);        list2.add("我是字符串");        // 判断列表是否包含了另一个集合的所有数据        boolean containsAll = list.containsAll(list2);        System.out.println("containsAll:"+containsAll);        // 得到数据在列表中的位置,第一次出现        int index = list.indexOf(1);        System.out.println("index:"+index);        // 删除某个位置的数据        list.remove(3);        System.out.println("list:" + list);        // 删除指定对象的第一个出现的位置        // 注意,如果是整数,要区分其与remove(int)的区别        // 建议用 remove(new Integer(123)); 来删除数据对象        list.remove(new Integer(123));        System.out.println("list:" + list);        // 删除列表里在另一个集合里存在的数据        Vector list3 = new Vector();        list3.add(1);        list3.add("我是字符串");        list.removeAll(list3);        System.out.println("list:" + list);        // 只保留在另一个集合里存在的数据,等于交集        Vector list4 = new Vector();        list4.add(2L);        list.retainAll(list4);        System.out.println("list:" + list);        // 替换指定位置的数据        list.add(1);        list.add(2);        list.add(3);        list.add(4);        list.add(5);        list.add(6);        list.add(7);        list.add(8);        list.set(0, 999);        System.out.println("list:" + list);        // 列表数据的数量        int size = list.size();        System.out.println("size:"+size);        // 得到一个子数组,包含前缀,不包含后缀        List subList = list.subList(2, 5);        System.out.println("subList:" + subList);        // 将集合转化为数组        Object[] objs = list.toArray();        // 将集合转化为指定格式的数组        // 比如集合里保存的都是String  可能会报错        String[] objs2 = (String[]) list.toArray(new String[0]);        // 列表的迭代器操作        // 顺序严格按照列表的保存的顺序        Iterator it = list.iterator();        // 列表的另一个迭代器        ListIterator listIT = list.listIterator();        //列表的另一个迭代器,可以指定起始位置        ListIterator listIT2 = list.listIterator(3);    }

  

3、LinkedList

实现了双向队列的控制,包括头尾的操作,可用于堆栈和FIFO操作等。

LinkedList linkedList = new LinkedList();
代码示例

/**     *  linkedListTest     */    public static void linkedListTest(){        LinkedList list = new LinkedList();        list.add(1);//int        list.add("我是字符串");        list.add(2L);//long        System.out.println("list:" + list);        LinkedList list1 = new LinkedList();        list1.add(3);        list1.add(0, 4);        System.out.println("list1:" + list1);        //将list2里面的数据,全部放到list1指定位置的后面        list.add(2, list1);        System.out.println("list:" + list);        // 清空列表,删除里面所有的数据        list1.clear();        // 判断列表里是否包含某个数据        boolean found = list.contains(2l);        System.out.println("found:"+found);        LinkedList list2 = new LinkedList();        list2.add(1);        list2.add("我是字符串");        // 判断列表是否包含了另一个集合的所有数据        boolean containsAll = list.containsAll(list2);        System.out.println("containsAll:"+containsAll);        // 得到数据在列表中的位置,第一次出现        int index = list.indexOf(1);        System.out.println("index:"+index);        // 删除某个位置的数据        list.remove(3);        System.out.println("list:" + list);        // 删除指定对象的第一个出现的位置        // 注意,如果是整数,要区分其与remove(int)的区别        // 建议用 remove(new Integer(123)); 来删除数据对象        list.remove(new Integer(123));        System.out.println("list:" + list);        // 删除列表里在另一个集合里存在的数据        LinkedList list3 = new LinkedList();        list3.add(1);        list3.add("我是字符串");        list.removeAll(list3);        System.out.println("list:" + list);        // 只保留在另一个集合里存在的数据,等于交集        LinkedList list4 = new LinkedList();        list4.add(2L);        list.retainAll(list4);        System.out.println("list:" + list);        // 替换指定位置的数据        list.add(1);        list.add(2);        list.add(3);        list.add(4);        list.add(5);        list.add(6);        list.add(7);        list.add(8);        list.set(0, 999);        System.out.println("list:" + list);        // 列表数据的数量        int size = list.size();        System.out.println("size:"+size);        // 得到一个子数组,包含前缀,不包含后缀        List subList = list.subList(2, 5);        System.out.println("subList:" + subList);        // 将集合转化为数组        Object[] objs = list.toArray();        // 将集合转化为指定格式的数组        // 比如集合里保存的都是String  可能会报错        String[] objs2 = (String[]) list.toArray(new String[0]);        // 列表的迭代器操作        // 顺序严格按照列表的保存的顺序        Iterator it = list.iterator();        // 列表的另一个迭代器        ListIterator listIT = list.listIterator();        //列表的另一个迭代器,可以指定起始位置        ListIterator listIT2 = list.listIterator(3);    }

  

4、Stack

集成自 Vector,提供了LIFO的堆栈操作方式

Stack stack = new Stack();
代码示例

/**     *  stackTest     */    public static void stackTest(){        Stack list = new Stack();        list.add(1);//int        list.add("我是字符串");        list.add(2L);//long        System.out.println("list:" + list);        Stack list1 = new Stack();        list1.add(3);        list1.add(0, 4);        System.out.println("list1:" + list1);        //将list2里面的数据,全部放到list1指定位置的后面        list.add(2, list1);        System.out.println("list:" + list);        // 清空列表,删除里面所有的数据        list1.clear();        // 判断列表里是否包含某个数据        boolean found = list.contains(2l);        System.out.println("found:"+found);        Stack list2 = new Stack();        list2.add(1);        list2.add("我是字符串");        // 判断列表是否包含了另一个集合的所有数据        boolean containsAll = list.containsAll(list2);        System.out.println("containsAll:"+containsAll);        // 得到数据在列表中的位置,第一次出现        int index = list.indexOf(1);        System.out.println("index:"+index);        // 删除某个位置的数据        list.remove(3);        System.out.println("list:" + list);        // 删除指定对象的第一个出现的位置        // 注意,如果是整数,要区分其与remove(int)的区别        // 建议用 remove(new Integer(123)); 来删除数据对象        list.remove(new Integer(123));        System.out.println("list:" + list);        // 删除列表里在另一个集合里存在的数据        Stack list3 = new Stack();        list3.add(1);        list3.add("我是字符串");        list.removeAll(list3);        System.out.println("list:" + list);        // 只保留在另一个集合里存在的数据,等于交集        Stack list4 = new Stack();        list4.add(2L);        list.retainAll(list4);        System.out.println("list:" + list);        // 替换指定位置的数据        list.add(1);        list.add(2);        list.add(3);        list.add(4);        list.add(5);        list.add(6);        list.add(7);        list.add(8);        list.set(0, 999);        System.out.println("list:" + list);        // 列表数据的数量        int size = list.size();        System.out.println("size:"+size);        // 得到一个子数组,包含前缀,不包含后缀        List subList = list.subList(2, 5);        System.out.println("subList:" + subList);        // 将集合转化为数组        Object[] objs = list.toArray();        // 将集合转化为指定格式的数组        // 比如集合里保存的都是String  可能会报错        String[] objs2 = (String[]) list.toArray(new String[0]);        // 列表的迭代器操作        // 顺序严格按照列表的保存的顺序        Iterator it = list.iterator();        // 列表的另一个迭代器        ListIterator listIT = list.listIterator();        //列表的另一个迭代器,可以指定起始位置        ListIterator listIT2 = list.listIterator(3);    }

  

转载于:https://www.cnblogs.com/xmyclass/p/6054507.html

你可能感兴趣的文章
(坑集)Django环境配置
查看>>
利用padding-top/padding-bottom百分比,进行占位和高度自适应
查看>>
常用的监控系统资源的工具
查看>>
08ssm三大框架整合以前步骤
查看>>
R语言学习笔记之八
查看>>
正则表达式语法(msdn)
查看>>
MySQL 数据类型 详解 (转载)
查看>>
Maven学习笔记(一)
查看>>
分割线
查看>>
xls的读写
查看>>
用函数创建子进程
查看>>
Myeclipse配置插件
查看>>
gitlab配置通过smtp发送邮件(QQ exmail腾讯企业为例)
查看>>
蓝桥杯之入学考试
查看>>
新公司java的注解以及springboot的相关注解
查看>>
Unity脚本的生命周期中几个重要的方法
查看>>
poj1552
查看>>
Thinkphp中文水印和图片水印合体集成插件
查看>>
FLASK安装--兼收EZ_INSTALL及PIP
查看>>
C++静态成员变量和静态成员函数小结
查看>>