javalist數組
『壹』 java ArrayList數組問題
Java沒有范型數組,所以你的定義都不對。可以參考以下方法實現類似功能:
import java.util.ArrayList;
public class Test
{
public static void main(String[]args)
ArrayList<ArrayList<Integer>> als = new ArrayList<ArrayList<Integer>> ();
ArrayList<Integer> a1 = new ArrayList<Integer>();
ArrayList<Integer> a2 = new ArrayList<Integer>();
ArrayList<Integer> a3 = new ArrayList<Integer>();
ArrayList<Integer> a4 = new ArrayList<Integer>();
//下面是添加行,你可以用循環添加固定的行
//每一列就是一個ArrayList<Integer>,你可以任意添加,長度不固定
als.add(a1);
als.add(a2);
als.add(a3);
als.add(a4);
System.out.println(als.size());
}
『貳』 java list和數組的區別
Array、List的區別
Array—是基於索引(index)的數據結構,它使用索引在數組中搜索和讀取數據是很快的。Array獲取數據的時間復雜度是O(1),但是要刪除數據卻是開銷很大
的,因為這需要重排數組中的所有數據
List—是一個有序的集合,可以包含重復的元素,提供了按索引訪問的方式,它繼承Collection。
List有兩個重要的實現類:ArrayList和LinkedList
ArrayList:可以看作是能夠自動增長容量的數組,利用ArrayList的toArray返回一個數組;Arrays.asList返回一個列表
1、ArrayList底層採用數組實現,當使用不帶參數的構造方法生成ArrayList對象時,實際上會在底層生成一個長度為10的Object類型的數組
2、如果增加的元素個數超過10個,那麼ArrayList底層會生成一個新的數組,長度為原數組的1.5倍+1,然後將原數組的內容復制到新數組中,並且後續增
加的內容都會放到新的數組當中,當新的數組無法容納增加的元素時,重讀該過程
3、對於ArrayList元素的刪除操作,需要將被刪除元素的後續元素向前移動,代價比較大
4、集合當中只能放置對象的引用,無法放置原生數據類型,我們必須使用原生數據的包裝類才能加入到集合當中
5、集合當中都是Object類型,因此取出來的也是Object類型,那麼必須要使用強制類型轉化將其轉換成真正的類型(放置進去的類型)
LinkedList:是一個雙鏈表,在添加和刪除元素時具有比ArrayList更好的性能.但在get與set方面弱於ArrayList.當然,這些對比都是指數據量很大或者操作很頻繁
的情況下的對比,如果數據和運算量很小,那麼對比將失去意義
LinkedList和ArrayList區別
LinkedList和ArrayList的差別主要來自於Array和LinkedList數據結構的不同。如果你很熟悉Array和LinkedList,你容易得出下面的結論:
1) 因為Array是基於索引(index)的數據結構,它使用索引在數組中搜索和讀取數據是很快的。Array獲取數據的時間復雜度是O(1),但是要刪除數據卻是開銷很大的,因為這需要重排數組中的所有數據。
2) 相對於ArrayList,LinkedList插入是更快的。因為LinkedList不像ArrayList一樣,不需要改變數組的大小,也不需要在數組裝滿的時候要將所有的數據重新裝入一個新的數組,這是ArrayList最壞的一種情況,時間復雜度是O(n),而LinkedList中插入或刪除的時間復雜度僅為O(1)。ArrayList在插入數據時還需要更新索引(除了插入數組的尾部)。
3) 類似於插入數據,刪除數據時,LinkedList也優於ArrayList。
4) LinkedList需要更多的內存,因為ArrayList的每個索引的位置是實際的數據,而LinkedList中的每個節點中存儲的是實際的數據和前後節點的位置。
什麼情況下用LinkedList或者使用ArrayList
1) 你的應用不會隨機訪問數據。因為如果你需要LinkedList中的第n個元素的時候,你需要從第一個元素順序數到第n個數據,然後讀取數據。
2) 你的應用更多的插入和刪除元素,更少的讀取數據。因為插入和刪除元素不涉及重排數據,所以它要比ArrayList要快。
以上就是關於ArrayList和LinkedList的差別。你需要一個不同步的基於索引的數據訪問時,請盡量使用ArrayList。ArrayList很快,也很容易使用。但是要記得要給定一個合適的初始大小,盡可能的減少更改數組的大小
引用自:http://blog.csdn.net/u010525970/article/details/52381730
『叄』 java怎麼把list轉成數組
publicstaticvoidlistToarray(){List<String>list=newArrayList<String>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");String[]arr=(String[])list.toArray(newString[list.size()]);for(inti=0;i<arr.length;i++){System.out.println(arr[i]);}}
『肆』 java怎麼把list轉化成數組
publicstaticvoidlistToarray()
{
List<String>list=newArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
String[]arr=(String[])list.toArray(newString[list.size()]);
for(inti=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
}
『伍』 java 怎麼把list轉換成數組
ArrayList<String> list=new ArrayList<String>();
String strings[]=(String [])list.toArray();
這樣寫代碼個人覺得應該沒什麼問題,編譯也沒有問題。可是具體運行的時候報異常,如下:Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
但是這么寫是沒有問題的:
ArrayList<String> list=new ArrayList<String>();
String strings[]=new String[list.size()];
for(int i=0,j=list.size();i<j;i++){
strings[i]=list.get(i);
}
對於這個現象我們可以這么解釋:Java中允許向上和向下轉型,但是這個轉型是否成功是根據Java虛擬機中這個對象的類型來實現的。Java虛擬機中保存了每個對象的類型。而數組也是一個對象。數組的類型是[Ljava.lang.Object。把[Ljava.lang.Object轉換成[Ljava.lang.String是顯然不可能的事情,因為這里是一個向下轉型,而虛擬機只保存了這是一個Object的數組,不能保證數組中的元素是String的,所以這個轉型不能成功。數組裡面的元素只是元素的引用,不是存儲的具體元素,所以數組中元素的類型還是保存在Java虛擬機中的。
根據上面的解釋,我們可以把這個問題歸納到下面這個模型:
Object objs[]=new Object[10];
String strs[]=(String[])objs;
這樣子和剛才上面編譯錯誤是一樣的。如果我們修改一下這個代碼,如下:
String strs[]=new String[10];
Object objs[]=strs;
這樣子就可以編譯通過了。所以這個問題我們可以歸結為一個Java轉型規則的問題。下面談一下Java數組對范型的支持問題。
JDK5中已經有了對范型的支持,這樣可以保證在集合和Map中的數據類型的安全,可是,List的toArray方法返回的竟然是Object []讓人很迷惑。個人感覺應該可以根據范型,直接返回相應的T []。仔細看了一下JDK的發現List轉化為array有兩個方法:
public Object[] toArray();
這個方法把List中的全部元素返回一個相同大小的數組,數組中的所有元素都為Object類型。
public <T> T[] toArray(T[] a);
這個方法把List中的全部元素返回一個相同大小的數組,數組中的所有元素都為T類型。
List如此設計是因為Java編譯器不允許我們new范型數組。也就是說你不能這么定義一個數組:
T arr=new T[size];
但是你卻可以用T[]來表示數組,而且可以把數組強制轉化為T[]。比如List中的public <T> T[] toArray(T[] a)是這么實現的:
public <T> T[] toArray(T[] a) {
if (a.length < size)
a = (T[])java.lang.reflect.Array.
newInstance(a.getClass().getComponentType(), size);
System.array(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
從上面代碼中可以看到,因為你不知道這個數組的類型,你必須通過反射機制創建這個數組(a.getClass().getComponentType()方法是取得一個數組元素的類型)。
最終,List轉換為Array可以這樣處理:
ArrayList<String> list=new ArrayList<String>();
String[] strings = new String[list.size()];
list.toArray(strings);
反過來,如果要將數組轉成List怎麼辦呢?如下:
String[] s = {"a","b","c"};
List list = java.util.Arrays.asList(s);
『陸』 java中list集合數組
創建一個類,定義這三個屬性,數組里存這個類的實例對象
『柒』 java實現把List的值放入一個數組中
List介面了有一個方法 toArray() 那是把List類型轉換為字元串數據類型的.轉一下不就可以嗎?很簡單的一個操作啊....
『捌』 關於java集合的一個問題,怎麼把一個數組添加到List集合
在第10行定義list的時候類型定義為數組類型就行。
ArrayList<int[]> list=new ArrayList<>();
如果list是按bean對象存,則對象要改變:之前List對象存2個屬性:DepartID,num,添加後的對象有3個屬性:DepartID,num,dpsNum,所以要定義新的List對象來存兩個List的結果。(見下面代碼,已調通,1個main類,3個對象類)。
如果list是按string存而非bean對象,則for循環遍歷list1後,將list2字元串拼接到list1末尾,再覆蓋進list1對應結果中就行,list1.set(index,list1.get(index)+list2.get(index)),類似這句,沒調試過。
(8)javalist數組擴展閱讀:
Java中的集合類可以分為兩大類:一類是實現Collection介面;另一類是實現Map介面。
Collection是一個基本的集合介面,Collection中可以容納一組集合元素(Element)。
Java提供了對象的數種保存方式,除了內置的數組以外,其餘的稱為集合類。為了使程序方便地存儲和操縱數目不固定的一組數據,JDK中提供了Java集合類,所有Java集合類都位於Java.util包中,與Java數組不同,Java集合不能存放基本數據類型數據,而只能存放對象的引用。
『玖』 java,list:定義一個list數組怎麼沒法定義該怎麼定義...
arrayList本身就是一個數組了沒必要那樣定義。
『拾』 Java如何將List 賦值到數組
首先取出styleid欄位的值,假設是字元串String
styleid="a/b/c";
然後String[]
s
=
styleid.split("/");
s就是字元串數組,s[0]="a";s[1]="b";s[3]="c"