list如何存儲數據
A. 怎麼將list<>保存到資料庫中
就是寫文件啊,循環list string str = Guid.NewGuid().ToString(); string strPath = "C:\\Program Files\\" + str + ".xls"; FileStream fs = File.Create(strPath); StreamWriter sw = new StreamWriter(fs, Encoding.Unicode); string strLine = ""; // 寫入列標題 for (int i = 0; i < colNames.Length; i++) { string[] col = colNames[i].Split('='); strLine = strLine + col[1].ToString() + Convert.ToChar(9); } sw.WriteLine(strLine); strLine = ""; // 寫入報表數據 for (int i = 0; i < dt.Rows.Count; i++) { // for (int j = 0; j < colNames.Length; j++) { string[] col = colNames[j].Split('='); strLine = strLine + dt.Rows[i][col[0]].ToString() + Convert.ToChar(9); } sw.WriteLine(strLine); strLine = ""; } sw.Close(); fs.Close();
B. 集合(三)List
同:三個類都是實現了List介面,存儲數據的特點相同:存儲有序的、可重復的數據
異:
ArrayList:是用的最多得,線程不安全所以效率高。底層使用Object[] elementData數組存儲
LinkedList:對於平凡的插入、刪除操作效率更高,因為底層是雙向鏈表(ArrayList的話要一個個移,但是查找多還是
ArrayList好)
Vector:1.0的時候出的古老實現類,其他包括List本身都是1.2出的;線程安全效率慢,其他和ArrayList差不多底層也是數組。接班不用
ArrayList:
jdk7.0的時候:
ArrayList list = new ArrayList();// 底層創建了長度是10的數組
當添加的元素數量超過數組容量了就擴容, 默認情況下擴容1.5倍 ,並復制到新數組里。(和StringBuilder很像)
建議開發中使用帶參數的構造器:
new ArrayList(int capacity)
jdk8.0的時候:
new ArrayList();//底層初始化為{},第一次add時才創建長度為10的數組,其他一樣
好處:延遲數組的創建,節省內存
Vector:
如果沒給capacity一開始也初始化長度為10的數組(類ArrayList7.0),但是擴容的時候擴為原來的2倍
Linked list = new LinkedList();//內部聲明了Node類型的first和last屬性,默認值為null
list.add(「something」);//創建node並將數據裝到node里
其中Node定義為:
//是linkedlist的一個內部類
private static class Node<E>{
E item;//數據
Node<E> next;
Node<E> prev;
Node(Node<E> prev,Node<E> next,Node<E> next){
this.item = element;
this.next = next;
this,prev = prev
}
}
List除了從Collection集合繼承的方法外,List 集合里添加了一些根據索引來操作集合元素的方法。
void add(int index, Object ele):在index位置插入ele元素
boolean addAll(int index, Collection eles):從index位置開始將eles中的所有元素添加進來
Object get(int index):獲取指定index位置的元素
int indexOf(Object obj):返回obj在集合中首次出現的位置,找不到就-1
int lastIndexOf(Object obj):返回obj在當前集合中末次出現的位置,找不到就-1
Object remove(int index):移除指定index位置的元素,並返回此元素
Object set(int index, Object ele):設置指定index位置的元素為ele
List subList(int fromIndex, int toIndex):返回從fromIndex到toIndex位置的子集合
總結常用方法:
增:add(Object)
刪:remove(Object)/remove(index)
改:set(index,Object)
查:get(index)
插入:add(index,Object)
長度:size()
遍歷:
1.iterator
2.for(Object o : list)
3.for(int i =0;i<list.size();i++)
C. 資料庫中用什麼類型存儲List
List類型本身是可以存放任何對象的,也就是只要是數據都可以存儲的。
如:List.add(new Object());這個語句是不會報錯的。由於Object是任何對象的父類,所以任何的子對象都是可以被List通過add方法進行存放的。
D. java中set集合與list集合分別是怎樣存放數據的
Java中的集合包括三大類,它們是Set、List和Map,它們都處於java.util包中,Set、List和Map都是介面,它們有各自的實現類。Set的實現類主要有HashSet和TreeSet,List的實現類主要有ArrayList,Map的實現類主要有HashMap和TreeMap。
Set中的對象不按特定方式排序,並且沒有重復對象。但它的有些實現類能對集合中的對象按特定方式排序,例如TreeSet類,它可以按照默認排序,也可以通過實現java.util.Comparator<Type>介面來自定義排序方式。
List中的對象按照索引位置排序,可以有重復對象,允許按照對象在集合中的索引位置檢索對象,如通過list.get(i)方式來獲得List集合中的元素。
Map中的每一個元素包含一個鍵對象和值對象,它們成對出現。鍵對象不能重復,值對象可以重復。