2010-08-10 16 views
1

我有一個簡短的(12個元素)LinkedList短串(每個7個字符)。具有完全相同的元素不良編程風格的列表和數組?

我需要通過索引和內容搜索這個列表(即搜索一個特定的字符串,並得到它在列表中的索引)。

我想在運行時將LinkedList作爲數組複製一次(因爲LinkedList是我類的靜態成員),所以我可以更快速地按索引訪問字符串。

鑑於LinkedList在運行時永遠不會改變,這是不好的編程習慣,或者這是一個值得考慮的想法嗎?

重要編輯:數組無法排序,我需要它將特定的字符串映射到特定的數字。

+0

索引在列表中的相關性是什麼?你爲什麼需要得到它? – 2010-08-10 15:28:49

+2

你爲什麼使用LinkedList?鏈接列表主要用於良好的插入/刪除性能,而您的列表聽起來像是從未改變過的。 – 2010-08-10 15:32:40

+0

@Jon Benedicto我的名單沒有排序,所以我認爲線性搜索將是最好的。那麼爲什麼在有indexOf()時重寫呢? @Winston Smith:字符串是十六進制顏色(即「#aabbcc」),索引是它在我使用的API中的映射) – 2010-08-10 15:47:26

回答

4

而不是LinkedList只需使用ArrayList - 您可以根據索引快速查找,並且您可以輕鬆地通過它進行搜索。

1

你可能想使用地圖要考慮的另一個想法:

Map someMap<int, String> 

這很容易通過這兩個鍵和值來搜索值的地圖。

也可能不是最好的主意,但至少好然後創建2列出了具有相同值=)

0

既然你知道你將要使用,爲什麼不使用數組元素的確切數額從頭開始?

string[] myArray = new string[7]; 
// Add your data 

Sort(myArray); // Sort your strings 

int value = binarySearch(myArray, "key"); // Search your array 

或者因爲你不能對數組進行排序,你可以只讓一個線性搜索方法

public int Search(string[] array, string key) 
{ 
    for(int i = 0; i < array.legnth(); i++) 
    { 
     if(array[i] == key) 
      return i; 
    } 
    return -1; 
} 

編輯:重新加載頁面和閱讀人民的響應後,我同意,ArrayList中應該是什麼你需要。

+0

看到我上面的評論,數組無法排序 – 2010-08-10 15:48:15

2

你想在這裏解決什麼問題?你是否擔心在LinkedList中按索引訪問元素太慢?如果是這樣,你可能想要使用ArrayList。

但是對於一個12個元素的列表,改進可能不會產生任何可測量的差異。除非你每秒訪問數百次,否則我不會浪費任何時間來優化它。

+0

它可能發生,我需要連續訪問它一百次,並且,因爲這將在互聯網連接Android設備上工作,我認爲性能可能是重要的。 – 2010-08-10 15:52:21

+0

好的,在這種情況下,使用ArrayList。 – 2010-08-10 16:00:06

0

我想說這取決於你的意圖和它真正的效果。

只有12個元素,我認爲將LinkedList轉換爲數組對性能沒有影響。所以它可能會使代碼不必要地(稍微)更難以被其他人理解。從這個角度來看,它可以被認爲是一種不理想的編程風格。

如果元素的數量增加,例如,您需要預先處理一些需要動態數據結構的數據。並且爲了以後使用索引查找性能會更好,這不會是一種糟糕的編程風格,而是一種必需的改進。

1

問題是,您爲什麼首先使用LinkedList

在數組列表上選擇LinkedList的主要原因是您需要在列表中間插入或刪除大量數據,或者如果您不知道列表的確切大小,想要進行數組重新分配。

選擇ArrayList而不是LinkedList的主要原因是您需要隨機訪問每個元素。

(還有其他的優勢/劣勢各,但這些都是可能浮現在腦海中的主要的)

它看起來像你需要到列表中隨機存取,所以你爲什麼要挑一個LinkedList過an ArrayList

相關問題