當前位置:首頁 » 編程語言 » java有序列表

java有序列表

發布時間: 2022-05-18 15:23:45

1. java中的linklist有哪些用法,list.add,list.getFirst(),這些是什麼意思

ArrayList Vector LinkedList 區別與用法

ArrayList 和Vector是採用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,都允許直接序號索引元素,但是插入數據要設計到數組元素移動等內存操作,所以索引數據快插入數據慢,Vector由於使用了synchronized方法(線程安全)所以性能上比ArrayList要差,LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行向前或向後遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入數度較快!

線性表,鏈表,哈希表是常用的數據結構,在進行Java開發時,JDK已經為我們提供了一系列相應的類來實現基本的數據結構。這些類均在java.util包中。本文試圖通過簡單的描述,向讀者闡述各個類的作用以及如何正確使用這些類。

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap

Collection介面
Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素(Elements)。一些Collection允許相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的「子介面」如List和Set。
所有實現Collection介面的類都必須提供兩個標準的構造函數:無參數的構造函數用於創建一個空的Collection,有一個Collection參數的構造函數用於創建一個新的Collection,這個新的Collection與傳入的Collection有相同的元素。後一個構造函數允許用戶復制一個Collection。
如何遍歷Collection中的每一個元素?不論Collection的實際類型如何,它都支持一個iterator()的方法,該方法返回一個迭代子,使用該迭代子即可逐一訪問Collection中每一個元素。典型的用法如下:
Iterator it = collection.iterator(); // 獲得一個迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一個元素
}
由Collection介面派生的兩個介面是List和Set。

List介面
List是有序的Collection,使用此介面能夠精確的控制每個元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似於數組下標)來訪問List中的元素,這類似於Java的數組。
和下面要提到的Set不同,List允許有相同的元素。
除了具有Collection介面必備的iterator()方法外,List還提供一個listIterator()方法,返回一個ListIterator介面,和標準的Iterator介面相比,ListIterator多了一些add()之類的方法,允許添加,刪除,設定元素,還能向前或向後遍歷。
實現List介面的常用類有LinkedList,ArrayList,Vector和Stack。

LinkedList類
LinkedList實現了List介面,允許null元素。此外LinkedList提供額外的get,remove,insert方法在LinkedList的首部或尾部。這些操作使LinkedList可被用作堆棧(stack),隊列(queue)或雙向隊列(deque)。
注意LinkedList沒有同步方法。如果多個線程同時訪問一個List,則必須自己實現訪問同步。一種解決方法是在創建List時構造一個同步的List:
List list = Collections.synchronizedList(new LinkedList(...));

ArrayList類
ArrayList實現了可變大小的數組。它允許所有元素,包括null。ArrayList沒有同步。
size,isEmpty,get,set方法運行時間為常數。但是add方法開銷為分攤的常數,添加n個元素需要O(n)的時間。其他的方法運行時間為線性。
每個ArrayList實例都有一個容量(Capacity),即用於存儲元素的數組的大小。這個容量可隨著不斷添加新元素而自動增加,但是增長演算法並沒有定義。當需要插入大量元素時,在插入前可以調用ensureCapacity方法來增加ArrayList的容量以提高插入效率。
和LinkedList一樣,ArrayList也是非同步的(unsynchronized)。

Vector類
Vector非常類似ArrayList,但是Vector是同步的。由Vector創建的Iterator,雖然和ArrayList創建的Iterator是同一介面,但是,因為Vector是同步的,當一個Iterator被創建而且正在被使用,另一個線程改變了Vector的狀態(例如,添加或刪除了一些元素),這時調用Iterator的方法時將拋出,因此必須捕獲該異常。

Stack 類
Stack繼承自Vector,實現一個後進先出的堆棧。Stack提供5個額外的方法使得Vector得以被當作堆棧使用。基本的push和pop方法,還有peek方法得到棧頂的元素,empty方法測試堆棧是否為空,search方法檢測一個元素在堆棧中的位置。Stack剛創建後是空棧。

Set介面
Set是一種不包含重復的元素的Collection,即任意的兩個元素e1和e2都有e1.equals(e2)=false,Set最多有一個null元素。
很明顯,Set的構造函數有一個約束條件,傳入的Collection參數不能包含重復的元素。
請注意:必須小心操作可變對象(Mutable Object)。如果一個Set中的可變元素改變了自身狀態導致Object.equals(Object)=true將導致一些問題。

Map介面
請注意,Map沒有繼承Collection介面,Map提供key到value的映射。一個Map中不能包含相同的key,每個key只能映射一個value。Map介面提供3種集合的視圖,Map的內容可以被當作一組key集合,一組value集合,或者一組key-value映射。

Hashtable類
Hashtable繼承Map介面,實現一個key-value映射的哈希表。任何非空(non-null)的對象都可作為key或者value。
添加數據使用put(key, value),取出數據使用get(key),這兩個基本操作的時間開銷為常數。
Hashtable通過initial capacity和load factor兩個參數調整性能。通常預設的load factor 0.75較好地實現了時間和空間的均衡。增大load factor可以節省空間但相應的查找時間將增大,這會影響像get和put這樣的操作。
使用Hashtable的簡單示例如下,將1,2,3放到Hashtable中,他們的key分別是」one」,」two」,」three」:
Hashtable numbers = new Hashtable();
numbers.put(「one」, new Integer(1));
numbers.put(「two」, new Integer(2));
numbers.put(「three」, new Integer(3));
要取出一個數,比如2,用相應的key:
Integer n = (Integer)numbers.get(「two」);
System.out.println(「two = 」 + n);
由於作為key的對象將通過計算其散列函數來確定與之對應的value的位置,因此任何作為key的對象都必須實現hashCode和equals方法。hashCode和equals方法繼承自根類Object,如果你用自定義的類當作key的話,要相當小心,按照散列函數的定義,如果兩個對象相同,即obj1.equals(obj2)=true,則它們的hashCode必須相同,但如果兩個對象不同,則它們的hashCode不一定不同,如果兩個不同對象的hashCode相同,這種現象稱為沖突,沖突會導致操作哈希表的時間開銷增大,所以盡量定義好的hashCode()方法,能加快哈希表的操作。
如果相同的對象有不同的hashCode,對哈希表的操作會出現意想不到的結果(期待的get方法返回null),要避免這種問題,只需要牢記一條:要同時復寫equals方法和hashCode方法,而不要只寫其中一個。
Hashtable是同步的。

HashMap類
HashMap和Hashtable類似,不同之處在於HashMap是非同步的,並且允許null,即null value和null key。,但是將HashMap視為Collection時(values()方法可返回Collection),其迭代子操作時間開銷和HashMap的容量成比例。因此,如果迭代操作的性能相當重要的話,不要將HashMap的初始化容量設得過高,或者load factor過低。

WeakHashMap類
WeakHashMap是一種改進的HashMap,它對key實行「弱引用」,如果一個key不再被外部所引用,那麼該key可以被GC回收。

總結
如果涉及到堆棧,隊列等操作,應該考慮用List,對於需要快速插入,刪除元素,應該使用LinkedList,如果需要快速隨機訪問元素,應該使用ArrayList。
如果程序在單線程環境中,或者訪問僅僅在一個線程中進行,考慮非同步的類,其效率較高,如果多個線程可能同時操作一個類,應該使用同步的類。
要特別注意對哈希表的操作,作為key的對象要正確復寫equals和hashCode方法。
盡量返回介面而非實際的類型,如返回List而非ArrayList,這樣如果以後需要將ArrayList換成LinkedList時,客戶端代碼不用改變。這就是針對抽象編程

同步性
Vector是同步的。這個類中的一些方法保證了Vector中的對象是線程安全的。而ArrayList則是非同步的,因此ArrayList中的對象並不是線程安全的。因為同步的要求會影響執行的效率,所以如果你不需要線程安全的集合那麼使用ArrayList是一個很好的選擇,這樣可以避免由於同步帶來的不必要的性能開銷。
數據增長
從內部實現機制來講ArrayList和Vector都是使用數組(Array)來控制集合中的對象。當你向這兩種類型中增加元素的時候,如果元素的數目超出了內部數組目前的長度它們都需要擴展內部數組的長度,Vector預設情況下自動增長原來一倍的數組長度,ArrayList是原來的50%,所以最後你獲得的這個集合所佔的空間總是比你實際需要的要大。所以如果你要在集合中保存大量的數據那麼使用Vector有一些優勢,因為你可以通過設置集合的初始化大小來避免不必要的資源開銷。
使用模式
在ArrayList和Vector中,從一個指定的位置(通過索引)查找數據或是在集合的末尾增加、移除一個元素所花費的時間是一樣的,這個時間我們用O(1)表示。但是,如果在集合的其他位置增加或移除元素那麼花費的時間會呈線形增長:O(n-i),其中n代表集合中元素的個數,i代表元素增加或移除元素的索引位置。為什麼會這樣呢?以為在進行上述操作的時候集合中第i和第i個元素之後的所有元素都要執行位移的操作。這一切意味著什麼呢?
這意味著,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那麼使用Vector或ArrayList都可以。如果是其他操作,你最好選擇其他的集合操作類。比如,LinkList集合類在增加或移除集合中任何位置的元素所花費的時間都是一樣的?O(1),但它在索引一個元素的使用缺比較慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因為你可以簡單的使用索引來代替創建iterator對象的操作。LinkList也會為每個插入的元素創建對象,所有你要明白它也會帶來額外的開銷。
最後,在《Practical Java》一書中Peter Haggar建議使用一個簡單的數組(Array)來代替Vector或ArrayList。尤其是對於執行效率要求高的程序更應如此。因為使用數組(Array)避免了同步、額外的方法調用和不必要的重新分配空間的操作。

2. java 創建方法合並兩個有序鏈表成一個新的有序鏈表 代碼

public static SortedList mergeList(SortedList list1, SortedList list2){
Link current = list2.first;
while(current != null){
list1.insert(current.dData);
current = current.next;
}
return list1;
}

3. java有哪些集合

Java集合主要有四種,分別為:List列表、Queue隊列、Set集合、Map映射。
List列表:有序的,可重復的;
Queue隊列:有序,可重復的;
Set集合:不可重復;
Map映射:無序,鍵唯一,值不唯一。

4. 如何用java設計一個有序單鏈表類

class SortedLink{
public Node head;
public int add(Node assigned , Node input){
Node temp=head;
while(temp.next!=null){
if(temp==assigned) {
Node t=assigned.next;
assigned.next=input;
input.next=t;
return 1;
}
temp=temp.next;
}
return 0;
}
public int remove(Node assigned){
Node temp1=head;
Node temp2=head.next;
while(temp2.next!=null){
if(temp2==assigned) {
temp1.next=temp2.next;
temp2.dispose();
return 1;
}
temp1=temp2;
temp2=temp2.next;
}
return 0;
}
}
Node是一個類,就自己實現吧……

5. 請大俠簡要的給我說一下java中list,hashmap的聯系和區別,不勝感激!

從幫助文檔看
List
有序的 collection(也稱為序列)。此介面的用戶可以對列表中每個元素的插入位置進行精確地控制。用戶可以根據元素的整數索引(在列表中的位置)訪問元素,並搜索列表中的元素
hashmap
基於哈希表的 Map 介面的實現。此實現提供所有可選的映射操作,並允許使用 null 值和 null 鍵。(除了不同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。)此類不保證映射的順序,特別是它不保證該順序恆久不變。
----------------------
說白了點,兩者都是集合,list是有序的,通過其實現的類看出來,如ArrayList,Vector 等。其取值是通過索引,如get(1)方法;hashmap是無序的,取值通過關鍵字key 取得 get("key")其介面是map
--------------------
從你的提問說明下,而這區別還存在 list 是介面interface hashmap是類class,弄清楚介面和類的區別
------------------------------

6. java有哪些有序集合

1、List:有序的collection(也稱為序列)。此介面可以對列表中每個元素的插入位置進行精確地控制。可以根據元素的在列表中的位置訪問元素,並搜索列表中的元素。列表允許重復的元素。
ArrayList:
特點:有序的、線性的、無固定大小的、有下標的、先進先出。
2.Set:是簡單的集合,它的對象不按特定方式排序,只是簡單的把對象加入集合中。不能有重復對象。
HashSet:
特點:無序的,長度可變的,不可重復的。
3.Map:Map中存入的對象是一對一對的,即每個對象和它的一個名字(鍵:key)關聯在一起,一個鍵(key)只能對應一個值(value),反則不然。
HashMap:
特點:無序的、不可重復的。

7. java arraylist是有序的嗎

是有序的。

比如:List<Integer> list=new ArrayList<Integer>();

list.get(0)

一個list,第一個放進去是1,第二個放進去是2:

List<Integer> numList=new ArrayList<>();

numList.add(1);

numList.add(2);

當取第一個時numList.get(0);(下標從0開始)

列印它出來還是:1

(7)java有序列表擴展閱讀:

LinkedList :對順序訪問進行了優化,向List中間插入與刪除的開銷並不大。隨機訪問則相對較慢。(使用ArrayList代替)還具有下列方 法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 這些方法 (沒有在任何介面或基類中定義過)使得LinkedList可以當作堆棧、隊列和雙向隊列使用。

8. java中list,set和map 的區別

List有序列表,除了首尾,每一項都有前趨後繼項。
Set無序集。
Map是Key>Value映射的集合。

9. Java中二維數組排序的問題

文章
java數組排序2009年09月12日 星期六 下午 12:55import java.util.Random;

/**
* 排序測試類
*
* 排序演算法的分類如下:
* 1.插入排序(直接插入排序、折半插入排序、希爾排序);
* 2.交換排序(冒泡泡排序、快速排序);
* 3.選擇排序(直接選擇排序、堆排序);
* 4.歸並排序;
* 5.基數排序。
*
* 關於排序方法的選擇:
* (1)若n較小(如n≤50),可採用直接插入或直接選擇排序。
* 當記錄規模較小時,直接插入排序較好;否則因為直接選擇移動的記錄數少於直接插人,應選直接選擇排序為宜。
* (2)若文件初始狀態基本有序(指正序),則應選用直接插人、冒泡或隨機的快速排序為宜;
* (3)若n較大,則應採用時間復雜度為O(nlgn)的排序方法:快速排序、堆排序或歸並排序。
*
* @author WangRuifeng
*/
public class SortTest {

/**
* 初始化測試數組的方法
* @return 一個初始化好的數組
*/
public int[] createArray() {
Random random = new Random();
int[] array = new int[10];
for (int i = 0; i < 10; i++) {
array[i] = random.nextInt(100) - random.nextInt(100);//生成兩個隨機數相減,保證生成的數中有負數
}
System.out.println("==========原始序列==========");
printArray(array);
return array;
}

/**
* 列印數組中的元素到控制台
* @param source
*/
public void printArray(int[] source) {
for (int i : source) {
System.out.print(i + " ");
}
System.out.println();
}

/**
* 交換數組中指定的兩元素的位置
* @param source
* @param x
* @param y
*/
private void swap(int[] source, int x, int y) {
int temp = source[x];
source[x] = source[y];
source[y] = temp;
}

/**
* 冒泡排序----交換排序的一種
* 方法:相鄰兩元素進行比較,如有需要則進行交換,每完成一次循環就將最大元素排在最後(如從小到大排序),下一次循環是將其他的數進行類似操作。
* 性能:比較次數O(n^2),n^2/2;交換次數O(n^2),n^2/4
*
* @param source 要排序的數組
* @param sortType 排序類型
* @return
*/
public void bubbleSort(int[] source, String sortType) {
if (sortType.equals("asc")) { //正排序,從小排到大
for (int i = source.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (source[j] > source[j + 1]) {
swap(source, j, j + 1);
}
}
}
} else if (sortType.equals("desc")) { //倒排序,從大排到小
for (int i = source.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (source[j] < source[j + 1]) {
swap(source, j, j + 1);
}
}
}
} else {
System.out.println("您輸入的排序類型錯誤!");
}
printArray(source);//輸出冒泡排序後的數組值
}

/**
* 直接選擇排序法----選擇排序的一種
* 方法:每一趟從待排序的數據元素中選出最小(或最大)的一個元素, 順序放在已排好序的數列的最後,直到全部待排序的數據元素排完。
* 性能:比較次數O(n^2),n^2/2
* 交換次數O(n),n
* 交換次數比冒泡排序少多了,由於交換所需CPU時間比比較所需的CUP時間多,所以選擇排序比冒泡排序快。
* 但是N比較大時,比較所需的CPU時間佔主要地位,所以這時的性能和冒泡排序差不太多,但毫無疑問肯定要快些。
*
* @param source 要排序的數組
* @param sortType 排序類型
* @return
*/
public void selectSort(int[] source, String sortType) {

if (sortType.equals("asc")) { //正排序,從小排到大
for (int i = 0; i < source.length; i++) {
for (int j = i + 1; j < source.length; j++) {
if (source[i] > source[j]) {
swap(source, i, j);
}
}
}
} else if (sortType.equals("desc")) { //倒排序,從大排到小
for (int i = 0; i < source.length; i++) {
for (int j = i + 1; j < source.length; j++) {
if (source[i] < source[j]) {
swap(source, i, j);
}
}
}
} else {
System.out.println("您輸入的排序類型錯誤!");
}
printArray(source);//輸出直接選擇排序後的數組值
}

/**
* 插入排序
* 方法:將一個記錄插入到已排好序的有序表(有可能是空表)中,從而得到一個新的記錄數增1的有序表。
* 性能:比較次數O(n^2),n^2/4
* 復制次數O(n),n^2/4
* 比較次數是前兩者的一般,而復制所需的CPU時間較交換少,所以性能上比冒泡排序提高一倍多,而比選擇排序也要快。
*
* @param source 要排序的數組
* @param sortType 排序類型
*/
public void insertSort(int[] source, String sortType) {
if (sortType.equals("asc")) { //正排序,從小排到大
for (int i = 1; i < source.length; i++) {
for (int j = i; (j > 0) && (source[j] < source[j - 1]); j--) {
swap(source, j, j - 1);
}
}
} else if (sortType.equals("desc")) { //倒排序,從大排到小
for (int i = 1; i < source.length; i++) {
for (int j = i; (j > 0) && (source[j] > source[j - 1]); j--) {
swap(source, j, j - 1);
}
}
} else {
System.out.println("您輸入的排序類型錯誤!");
}
printArray(source);//輸出插入排序後的數組值
}

/**
* 反轉數組的方法
* @param source 源數組
*/
public void reverse(int[] source) {

int length = source.length;
int temp = 0;//臨時變數

for (int i = 0; i < length / 2; i++) {
temp = source[i];
source[i] = source[length - 1 - i];
source[length - 1 - i] = temp;
}
printArray(source);//輸出到轉後數組的值
}

/**
* 快速排序
* 快速排序使用分治法(Divide and conquer)策略來把一個序列(list)分為兩個子序列(sub-lists)。
* 步驟為:
* 1. 從數列中挑出一個元素,稱為 "基準"(pivot),
* 2. 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割之後,該基準是它的最後位置。這個稱為分割(partition)操作。
* 3. 遞歸地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
* 遞回的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞回下去,但是這個演算法總會結束,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。
* @param source 待排序的數組
* @param low
* @param high
* @see SortTest#qsort(int[], int, int)
* @see SortTest#qsort_desc(int[], int, int)
*/
public void quickSort(int[] source, String sortType) {
if (sortType.equals("asc")) { //正排序,從小排到大
qsort_asc(source, 0, source.length - 1);
} else if (sortType.equals("desc")) { //倒排序,從大排到小
qsort_desc(source, 0, source.length - 1);
} else {
System.out.println("您輸入的排序類型錯誤!");
}
}

/**
* 快速排序的具體實現,排正序
* @param source
* @param low
* @param high
*/
private void qsort_asc(int source[], int low, int high) {
int i, j, x;
if (low < high) { //這個條件用來結束遞歸
i = low;
j = high;
x = source[i];
while (i < j) {
while (i < j && source[j] > x) {
j--; //從右向左找第一個小於x的數
}
if (i < j) {
source[i] = source[j];
i++;
}
while (i < j && source[i] < x) {
i++; //從左向右找第一個大於x的數
}
if (i < j) {
source[j] = source[i];
j--;
}
}
source[i] = x;
qsort_asc(source, low, i - 1);
qsort_asc(source, i + 1, high);
}
}

/**
* 快速排序的具體實現,排倒序
* @param source
* @param low
* @param high
*/
private void qsort_desc(int source[], int low, int high) {
int i, j, x;
if (low < high) { //這個條件用來結束遞歸
i = low;
j = high;
x = source[i];
while (i < j) {
while (i < j && source[j] < x) {
j--; //從右向左找第一個小於x的數
}
if (i < j) {
source[i] = source[j];
i++;
}
while (i < j && source[i] > x) {
i++; //從左向右找第一個大於x的數
}
if (i < j) {
source[j] = source[i];
j--;
}
}
source[i] = x;
qsort_desc(source, low, i - 1);
qsort_desc(source, i + 1, high);
}
}

/**
* 二分法查找
* 查找線性表必須是有序列表
*
* @param source
* @param key
* @return
*/
public int binarySearch(int[] source, int key) {
int low = 0, high = source.length - 1, mid;
while (low <= high) {
mid = (low + high) >>> 1; //相當於mid = (low + high) / 2,但是效率會高些
if (key == source[mid]) {
return mid;
} else if (key < source[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}

public static void main(String[] args) {
SortTest sortTest = new SortTest();

int[] array = sortTest.createArray();

System.out.println("==========冒泡排序後(正序)==========");
sortTest.bubbleSort(array, "asc");
System.out.println("==========冒泡排序後(倒序)==========");
sortTest.bubbleSort(array, "desc");

array = sortTest.createArray();

System.out.println("==========倒轉數組後==========");
sortTest.reverse(array);

array = sortTest.createArray();

System.out.println("==========選擇排序後(正序)==========");
sortTest.selectSort(array, "asc");
System.out.println("==========選擇排序後(倒序)==========");
sortTest.selectSort(array, "desc");

array = sortTest.createArray();

System.out.println("==========插入排序後(正序)==========");
sortTest.insertSort(array, "asc");
System.out.println("==========插入排序後(倒序)==========");
sortTest.insertSort(array, "desc");

array = sortTest.createArray();
System.out.println("==========快速排序後(正序)==========");
sortTest.quickSort(array, "asc");
sortTest.printArray(array);
System.out.println("==========快速排序後(倒序)==========");
sortTest.quickSort(array, "desc");
sortTest.printArray(array);

System.out.println("==========數組二分查找==========");
System.out.println("您要找的數在第" + sortTest.binarySearch(array, 74) + "個位子。(下標從0計算)");
}
}

字元串排序:

public class StringSort {
public static void main(String []args) {
String[] s={"a","b","c","d","m","f"};
for(int i=s.length-1;i>=1;i--){
for(int j=0;j<=i-1;j++) {
if(s[j].compareTo(s[j+1])<0) {
String temp=null;
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
}
for(String a:s){
System.out.print(a+" ");
}
}
}
比較字元串的實質是比較字元串的字母,首字母相同,比較下一個,然後又相同的話,再下一個....所以你可以先用substring();截出第一個字元,然後再比較,相同的再截第二個,.....

hope some help for you

10. java里 list順序是固定的嗎,是有序的嗎

list是有序的,是以數組的存儲方式進行存儲.也就是說數組什麼樣它就什麼樣,唯一的區別就是,它沒有固定大小. 且list的檢索效率比較高,不過要頻繁的對這個容器里的元素進行更新就不要用它了,用linkedlist比較好.

順序放進去是不會亂的,舉個例子,一個list,第一個放進去是1,第二個放進去是2:
List<Integer> numList=new ArrayList<>();
numList.add(1);
numList.add(2);
當你取第一個時numList.get(0);(下標從0開始)
列印它出來還是:1
List 介面下ArrayList 特點是: 插入數據 有序且可重復 適合查找多增刪少。

熱點內容
超凡先鋒配置不行怎麼辦 發布:2025-05-15 23:27:54 瀏覽:530
win7取消加密 發布:2025-05-15 23:26:37 瀏覽:470
不用internet打開ftp 發布:2025-05-15 23:06:00 瀏覽:153
sql字元串取數字 發布:2025-05-15 22:57:45 瀏覽:124
推薦編程課 發布:2025-05-15 22:34:12 瀏覽:618
表拒絕訪問 發布:2025-05-15 22:29:37 瀏覽:978
電腦怎樣解壓文件 發布:2025-05-15 22:25:32 瀏覽:439
dns伺服器怎麼看 發布:2025-05-15 22:17:27 瀏覽:151
3dm的壓縮包 發布:2025-05-15 22:09:23 瀏覽:662
和存儲字長 發布:2025-05-15 21:54:09 瀏覽:515