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

Java列表踩过的坑

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

加入tair测试代码
    @Autowired

private CacheManager cacheManager;

@Test

public void listTest() {<br/>
    ArrayList arrayList = new ArrayList();<br/>
    arrayList.add(1);<br/>
    arrayList.add(2);<br/>
    arrayList.add(3);<br/>
    arrayList.add(&#34;我是字符串&#34;);<br/>
    //正确<br/>
    boolean dev_testkey = cacheManager.addToTair(&#34;dev_testkey&#34;, arrayList, 60 * 30);<br/>
    try {<br/>
        //报错<br/>
        ArrayList&lt;String&gt; list00 = (ArrayList&lt;String&gt;)arrayList.subList(1, 2);<br/>
        dev_testkey = cacheManager.addToTair(&#34;dev_testkey&#34;, list00, 60 * 30);<br/>
    }catch (Exception e){<br/>
        System.out.println(&#34;error&#34;);<br/>
    }<br/>
    try {<br/>
        //报错<br/>
        ArrayList list0 = (ArrayList)arrayList.subList(0, 1);<br/>
        dev_testkey = cacheManager.addToTair(&#34;dev_testkey&#34;, list0, 60 * 30);<br/>
    }catch (Exception e){<br/>
        System.out.println(&#34;error&#34;);<br/>
    }<br/>
    try {<br/>
        //报错<br/>
        List list1 = arrayList.subList(0, 1);<br/>
        dev_testkey = cacheManager.addToTair(&#34;dev_testkey&#34;, (ArrayList&lt;String&gt;)list1, 60 * 30);<br/>
    }catch (Exception e){<br/>
        System.out.println(&#34;error&#34;);<br/>
    }

List list = new ArrayList();

    list.add(1);<br/>
    list.add(&#34;我是字符串&#34;);<br/>
    //正确<br/>
    dev_testkey = cacheManager.addToTair(&#34;dev_testkey&#34;, arrayList, 60 * 30);

String tags = “1,2,3,4,5”;

    List&lt;String&gt; tagslist = Arrays.asList(tags.split(&#34;,&#34;));<br/>
    ArrayList&lt;String&gt; okList = new ArrayList&lt;String&gt;(Arrays.asList(tags.split(&#34;,&#34;)));<br/>
    try {<br/>
        //报错<br/>
        dev_testkey = cacheManager.addToTair(&#34;dev_testkey&#34;, (ArrayList&lt;String&gt;)tagslist, 60 * 30);<br/>
    }catch (Exception e){<br/>
        System.out.println(&#34;error&#34;);<br/>
    }

//正确

    dev_testkey = cacheManager.addToTair(&#34;dev_testkey&#34;, okList, 60 * 30);

try {

        //报错<br/>
        List&lt;String&gt; okSubList = tagslist.subList(0, 3);<br/>
        dev_testkey = cacheManager.addToTair(&#34;dev_testkey&#34;, (ArrayList&lt;String&gt;)okSubList, 60 * 30);<br/>
    }catch (Exception e){<br/>
        System.out.println(&#34;error&#34;);<br/>
    }

try {

        //报错<br/>
        dev_testkey = cacheManager.addToTair(&#34;dev_testkey3&#34;, (ArrayList&lt;String&gt;)tagslist, 60 * 30);<br/>
    }catch (Exception e){<br/>
        System.out.println(&#34;error&#34;);<br/>
    }

List&lt;String&gt; subList = tagslist.subList(0, 3);

    try {<br/>
        //报错<br/>
        dev_testkey = cacheManager.addToTair(&#34;dev_testkey4&#34;, (ArrayList&lt;String&gt;)subList, 60 * 30);<br/>
    }catch (Exception e){<br/>
        System.out.println(&#34;error&#34;);<br/>
    }

}

  

Java中怎样把数组转换为ArrayList?
方法1、较好
ArrayList&lt;Element&gt; arrayList = new ArrayList&lt;Element&gt;(Arrays.asList(array)); 方法2、
List&lt;Element&gt; list = Arrays.asList(array); 方法3、
Element[] array = {new Element(1), new Element(2)};
List&lt;element&gt; list = new ArrayList&lt;element&gt;(array.length);
Collections.addAll(list, array);

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

代码示例

List&lt;String&gt; arrays_arrayList = Arrays.asList(“王利虎”,“张三”,“李四”,“李四”);    //是Arrays下的私有静态类ArrayList,没有序列化

    List&lt;String&gt; randomAccessSubList = arrays_arrayList.subList(0, 1);            //是RandomAccessSubList,没有序列化

ArrayList list_0 = new ArrayList();

    list_0.add(1);<br/>
    list_0.add(&#34;xxx&#34;);<br/>
    List&lt;String&gt; arrayList_subList = list_0.subList(0, 1);                        //是ArrayList下的私有静态类SubList,没有序列化</pre><pre>        ArrayList&lt;String&gt; error = (ArrayList&lt;String&gt;) arrays_arrayList;               //出错</pre>

  

彻底删除列表中的一个元素
        //想把列表里全部的1删除 使用removeAll

    ArrayList arrayList = new ArrayList();<br/>
    arrayList.add(1);<br/>
    arrayList.add(2);<br/>
    arrayList.add(3);<br/>
    arrayList.add(1);<br/>
    arrayList.add(1);

ArrayList arrayList2 = new ArrayList();

    arrayList2.add(1);<br/>
    arrayList.removeAll(arrayList2);

  

1、ArrayList

ArrayList是大小可变列表的实现,允许任何数据加入
ArrayList arrayList = new ArrayList();
public boolean add(E e);
代码示例

    /**

 *  arrayListTest<br/>
 */<br/>
public static void arrayListTest(){<br/>
    ArrayList list = new ArrayList();<br/>
    list.add(1);//int<br/>
    list.add(&#34;我是字符串&#34;);<br/>
    list.add(2L);//long<br/>
    System.out.println(&#34;list:&#34; + list);

ArrayList list1 = new ArrayList();

    list1.add(3);<br/>
    list1.add(0, 4);<br/>
    System.out.println(&#34;list1:&#34; + list1);

//将list2里面的数据,全部放到list1指定位置的后面

    list.add(2, list1);<br/>
    System.out.println(&#34;list:&#34; + list);

// 清空列表,删除里面所有的数据

    list1.clear();

// 判断列表里是否包含某个数据

    boolean found = list.contains(2l);<br/>
    System.out.println(&#34;found:&#34;+found);

ArrayList list2 = new ArrayList();

    list2.add(1);<br/>
    list2.add(&#34;我是字符串&#34;);<br/>
    // 判断列表是否包含了另一个集合的所有数据<br/>
    boolean containsAll = list.containsAll(list2);<br/>
    System.out.println(&#34;containsAll:&#34;+containsAll);

// 得到数据在列表中的位置,第一次出现

    int index = list.indexOf(1);<br/>
    System.out.println(&#34;index:&#34;+index);

// 删除某个位置的数据

    list.remove(3);<br/>
    System.out.println(&#34;list:&#34; + list);

// 删除指定对象的第一个出现的位置

    // 注意,如果是整数,要区分其与remove(int)的区别<br/>
    // 建议用 remove(new Integer(123)); 来删除数据对象<br/>
    list.remove(new Integer(123));<br/>
    System.out.println(&#34;list:&#34; + list);

// 删除列表里在另一个集合里存在的数据

    ArrayList list3 = new ArrayList();<br/>
    list3.add(1);<br/>
    list3.add(&#34;我是字符串&#34;);<br/>
    list.removeAll(list3);<br/>
    System.out.println(&#34;list:&#34; + list);

// 只保留在另一个集合里存在的数据,等于交集

    ArrayList list4 = new ArrayList();<br/>
    list4.add(2L);<br/>
    list.retainAll(list4);<br/>
    System.out.println(&#34;list:&#34; + list);

// 替换指定位置的数据

    list.add(1);<br/>
    list.add(2);<br/>
    list.add(3);<br/>
    list.add(4);<br/>
    list.add(5);<br/>
    list.add(6);<br/>
    list.add(7);<br/>
    list.add(8);

list.set(0, 999);

    System.out.println(&#34;list:&#34; + list);

// 列表数据的数量

    int size = list.size();<br/>
    System.out.println(&#34;size:&#34;+size);<br/>
    // 得到一个子数组,包含前缀,不包含后缀<br/>
    List subList = list.subList(2, 5);<br/>
    System.out.println(&#34;subList:&#34; + subList);

// 将集合转化为数组

    Object[] objs = list.toArray();

// 将集合转化为指定格式的数组

    // 比如集合里保存的都是String  可能会报错<br/>
    String[] objs2 = (String[]) list.toArray(new String[0]);

// 列表的迭代器操作

    // 顺序严格按照列表的保存的顺序<br/>
    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<br/>
 */<br/>
public static void vectorTest(){<br/>
    Vector list = new Vector();<br/>
    list.add(1);//int<br/>
    list.add(&#34;我是字符串&#34;);<br/>
    list.add(2L);//long<br/>
    System.out.println(&#34;list:&#34; + list);

Vector list1 = new Vector();

    list1.add(3);<br/>
    list1.add(0, 4);<br/>
    System.out.println(&#34;list1:&#34; + list1);

//将list2里面的数据,全部放到list1指定位置的后面

    list.add(2, list1);<br/>
    System.out.println(&#34;list:&#34; + list);

// 清空列表,删除里面所有的数据

    list1.clear();

// 判断列表里是否包含某个数据

    boolean found = list.contains(2l);<br/>
    System.out.println(&#34;found:&#34;+found);

Vector list2 = new Vector();

    list2.add(1);<br/>
    list2.add(&#34;我是字符串&#34;);<br/>
    // 判断列表是否包含了另一个集合的所有数据<br/>
    boolean containsAll = list.containsAll(list2);<br/>
    System.out.println(&#34;containsAll:&#34;+containsAll);

// 得到数据在列表中的位置,第一次出现

    int index = list.indexOf(1);<br/>
    System.out.println(&#34;index:&#34;+index);

// 删除某个位置的数据

    list.remove(3);<br/>
    System.out.println(&#34;list:&#34; + list);

// 删除指定对象的第一个出现的位置

    // 注意,如果是整数,要区分其与remove(int)的区别<br/>
    // 建议用 remove(new Integer(123)); 来删除数据对象<br/>
    list.remove(new Integer(123));<br/>
    System.out.println(&#34;list:&#34; + list);

// 删除列表里在另一个集合里存在的数据

    Vector list3 = new Vector();<br/>
    list3.add(1);<br/>
    list3.add(&#34;我是字符串&#34;);<br/>
    list.removeAll(list3);<br/>
    System.out.println(&#34;list:&#34; + list);

// 只保留在另一个集合里存在的数据,等于交集

    Vector list4 = new Vector();<br/>
    list4.add(2L);<br/>
    list.retainAll(list4);<br/>
    System.out.println(&#34;list:&#34; + list);

// 替换指定位置的数据

    list.add(1);<br/>
    list.add(2);<br/>
    list.add(3);<br/>
    list.add(4);<br/>
    list.add(5);<br/>
    list.add(6);<br/>
    list.add(7);<br/>
    list.add(8);

list.set(0, 999);

    System.out.println(&#34;list:&#34; + list);

// 列表数据的数量

    int size = list.size();<br/>
    System.out.println(&#34;size:&#34;+size);<br/>
    // 得到一个子数组,包含前缀,不包含后缀<br/>
    List subList = list.subList(2, 5);<br/>
    System.out.println(&#34;subList:&#34; + subList);

// 将集合转化为数组

    Object[] objs = list.toArray();

// 将集合转化为指定格式的数组

    // 比如集合里保存的都是String  可能会报错<br/>
    String[] objs2 = (String[]) list.toArray(new String[0]);

// 列表的迭代器操作

    // 顺序严格按照列表的保存的顺序<br/>
    Iterator it = list.iterator();

// 列表的另一个迭代器

    ListIterator listIT = list.listIterator();

//列表的另一个迭代器,可以指定起始位置

    ListIterator listIT2 = list.listIterator(3);<br/>
}

  

3、LinkedList

实现了双向队列的控制,包括头尾的操作,可用于堆栈和FIFO操作等。
LinkedList linkedList = new LinkedList();
代码示例

    /**

 *  linkedListTest<br/>
 */<br/>
public static void linkedListTest(){<br/>
    LinkedList list = new LinkedList();<br/>
    list.add(1);//int<br/>
    list.add(&#34;我是字符串&#34;);<br/>
    list.add(2L);//long<br/>
    System.out.println(&#34;list:&#34; + list);

LinkedList list1 = new LinkedList();

    list1.add(3);<br/>
    list1.add(0, 4);<br/>
    System.out.println(&#34;list1:&#34; + list1);

//将list2里面的数据,全部放到list1指定位置的后面

    list.add(2, list1);<br/>
    System.out.println(&#34;list:&#34; + list);

// 清空列表,删除里面所有的数据

    list1.clear();

// 判断列表里是否包含某个数据

    boolean found = list.contains(2l);<br/>
    System.out.println(&#34;found:&#34;+found);

LinkedList list2 = new LinkedList();

    list2.add(1);<br/>
    list2.add(&#34;我是字符串&#34;);<br/>
    // 判断列表是否包含了另一个集合的所有数据<br/>
    boolean containsAll = list.containsAll(list2);<br/>
    System.out.println(&#34;containsAll:&#34;+containsAll);

// 得到数据在列表中的位置,第一次出现

    int index = list.indexOf(1);<br/>
    System.out.println(&#34;index:&#34;+index);

// 删除某个位置的数据

    list.remove(3);<br/>
    System.out.println(&#34;list:&#34; + list);

// 删除指定对象的第一个出现的位置

    // 注意,如果是整数,要区分其与remove(int)的区别<br/>
    // 建议用 remove(new Integer(123)); 来删除数据对象<br/>
    list.remove(new Integer(123));<br/>
    System.out.println(&#34;list:&#34; + list);

// 删除列表里在另一个集合里存在的数据

    LinkedList list3 = new LinkedList();<br/>
    list3.add(1);<br/>
    list3.add(&#34;我是字符串&#34;);<br/>
    list.removeAll(list3);<br/>
    System.out.println(&#34;list:&#34; + list);

// 只保留在另一个集合里存在的数据,等于交集

    LinkedList list4 = new LinkedList();<br/>
    list4.add(2L);<br/>
    list.retainAll(list4);<br/>
    System.out.println(&#34;list:&#34; + list);

// 替换指定位置的数据

    list.add(1);<br/>
    list.add(2);<br/>
    list.add(3);<br/>
    list.add(4);<br/>
    list.add(5);<br/>
    list.add(6);<br/>
    list.add(7);<br/>
    list.add(8);

list.set(0, 999);

    System.out.println(&#34;list:&#34; + list);

// 列表数据的数量

    int size = list.size();<br/>
    System.out.println(&#34;size:&#34;+size);<br/>
    // 得到一个子数组,包含前缀,不包含后缀<br/>
    List subList = list.subList(2, 5);<br/>
    System.out.println(&#34;subList:&#34; + subList);

// 将集合转化为数组

    Object[] objs = list.toArray();

// 将集合转化为指定格式的数组

    // 比如集合里保存的都是String  可能会报错<br/>
    String[] objs2 = (String[]) list.toArray(new String[0]);

// 列表的迭代器操作

    // 顺序严格按照列表的保存的顺序<br/>
    Iterator it = list.iterator();

// 列表的另一个迭代器

    ListIterator listIT = list.listIterator();

//列表的另一个迭代器,可以指定起始位置

    ListIterator listIT2 = list.listIterator(3);<br/>
}

  

4、Stack

集成自 Vector,提供了LIFO的堆栈操作方式
Stack stack = new Stack();
代码示例

    /**

 *  stackTest<br/>
 */<br/>
public static void stackTest(){<br/>
    Stack list = new Stack();<br/>
    list.add(1);//int<br/>
    list.add(&#34;我是字符串&#34;);<br/>
    list.add(2L);//long<br/>
    System.out.println(&#34;list:&#34; + list);

Stack list1 = new Stack();

    list1.add(3);<br/>
    list1.add(0, 4);<br/>
    System.out.println(&#34;list1:&#34; + list1);

//将list2里面的数据,全部放到list1指定位置的后面

    list.add(2, list1);<br/>
    System.out.println(&#34;list:&#34; + list);

// 清空列表,删除里面所有的数据

    list1.clear();

// 判断列表里是否包含某个数据

    boolean found = list.contains(2l);<br/>
    System.out.println(&#34;found:&#34;+found);

Stack list2 = new Stack();

    list2.add(1);<br/>
    list2.add(&#34;我是字符串&#34;);<br/>
    // 判断列表是否包含了另一个集合的所有数据<br/>
    boolean containsAll = list.containsAll(list2);<br/>
    System.out.println(&#34;containsAll:&#34;+containsAll);

// 得到数据在列表中的位置,第一次出现

    int index = list.indexOf(1);<br/>
    System.out.println(&#34;index:&#34;+index);

// 删除某个位置的数据

    list.remove(3);<br/>
    System.out.println(&#34;list:&#34; + list);

// 删除指定对象的第一个出现的位置

    // 注意,如果是整数,要区分其与remove(int)的区别<br/>
    // 建议用 remove(new Integer(123)); 来删除数据对象<br/>
    list.remove(new Integer(123));<br/>
    System.out.println(&#34;list:&#34; + list);

// 删除列表里在另一个集合里存在的数据

    Stack list3 = new Stack();<br/>
    list3.add(1);<br/>
    list3.add(&#34;我是字符串&#34;);<br/>
    list.removeAll(list3);<br/>
    System.out.println(&#34;list:&#34; + list);

// 只保留在另一个集合里存在的数据,等于交集

    Stack list4 = new Stack();<br/>
    list4.add(2L);<br/>
    list.retainAll(list4);<br/>
    System.out.println(&#34;list:&#34; + list);

// 替换指定位置的数据

    list.add(1);<br/>
    list.add(2);<br/>
    list.add(3);<br/>
    list.add(4);<br/>
    list.add(5);<br/>
    list.add(6);<br/>
    list.add(7);<br/>
    list.add(8);

list.set(0, 999);

    System.out.println(&#34;list:&#34; + list);

// 列表数据的数量

    int size = list.size();<br/>
    System.out.println(&#34;size:&#34;+size);<br/>
    // 得到一个子数组,包含前缀,不包含后缀<br/>
    List subList = list.subList(2, 5);<br/>
    System.out.println(&#34;subList:&#34; + subList);

// 将集合转化为数组

    Object[] objs = list.toArray();

// 将集合转化为指定格式的数组

    // 比如集合里保存的都是String  可能会报错<br/>
    String[] objs2 = (String[]) list.toArray(new String[0]);

// 列表的迭代器操作

    // 顺序严格按照列表的保存的顺序<br/>
    Iterator it = list.iterator();

// 列表的另一个迭代器

    ListIterator listIT = list.listIterator();

//列表的另一个迭代器,可以指定起始位置

    ListIterator listIT2 = list.listIterator(3);<br/>
}