其中subList是RandomAccessSubList,不是序列化的列表,不能夠加入tair。java
@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"); } }
方法一、較好 ArrayList<Element> arrayList = new ArrayList<Element>(Arrays.asList(array)); 方法二、 List<Element> list = Arrays.asList(array); 方法三、 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 。數組
代碼示例dom
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);
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); }
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); }
實現了雙向隊列的控制,包括頭尾的操做,可用於堆棧和FIFO操做等。
LinkedList linkedList = new LinkedList();
代碼示例blog
/** * 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); }
集成自 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); }