你的位置:首页 > ASP.net教程

[ASP.net教程]Java列表


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<String> list00 = (ArrayList<String>)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<String>)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<String> tagslist = Arrays.asList(tags.split(","));    ArrayList<String> okList = new ArrayList<String>(Arrays.asList(tags.split(",")));    try {      //报错      dev_testkey = cacheManager.addToTair("dev_testkey", (ArrayList<String>)tagslist, 60 * 30);    }catch (Exception e){      System.out.println("error");    }    //正确    dev_testkey = cacheManager.addToTair("dev_testkey", okList, 60 * 30);    try {      //报错      List<String> okSubList = tagslist.subList(0, 3);      dev_testkey = cacheManager.addToTair("dev_testkey", (ArrayList<String>)okSubList, 60 * 30);    }catch (Exception e){      System.out.println("error");    }    try {      //报错      dev_testkey = cacheManager.addToTair("dev_testkey3", (ArrayList<String>)tagslist, 60 * 30);    }catch (Exception e){      System.out.println("error");    }    List<String> subList = tagslist.subList(0, 3);    try {      //报错      dev_testkey = cacheManager.addToTair("dev_testkey4", (ArrayList<String>)subList, 60 * 30);    }catch (Exception e){      System.out.println("error");    }  }

  

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

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

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

 

代码示例

List<String> arrays_arrayList = Arrays.asList("王利虎","张三","李四","李四");  //是Arrays下的私有静态类ArrayList,没有序列化    List<String> randomAccessSubList = arrays_arrayList.subList(0, 1);      //是RandomAccessSubList,没有序列化    ArrayList list_0 = new ArrayList();    list_0.add(1);    list_0.add("xxx");    List<String> arrayList_subList = list_0.subList(0, 1);            //是ArrayList下的私有静态类SubList,没有序列化
    ArrayList<String> error = (ArrayList<String>) 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);  }