2013-01-23 57 views
2

我正在關注this answer,在matlab中實現一個隊列。Matlab的結構和Java LinkedList

但不像在答案中我排隊strings而是structs。下面是我的示例代碼

import java.util.LinkedList; 
queue = LinkedList(); 
queue.add(struct('f', f, 'A', A)) % f and A are matrices 

但是,這給了我一個錯誤

No method 'add' with matching signature found for class 'java.util.LinkedList'. 

我該如何解決這個問題?

回答

2

MATLAB與Java有着非常密切的聯繫,自動將許多MATLAB本地數據類型轉換爲Java對象的數據類型以及來自其Java對象的數據類型...除了結構體。如果你考慮一下,這是有道理的:有一種自然的方式來映射POD類型和POD類型的數組,甚至單元陣列自然映射到java.lang.Object數組。但是創建結構的Java表示將需要相應的類定義。詳情請參閱this MATLAB documentation

因此,在Java容器中存儲MATLAB結構將需要一些額外的,可能的第三方代碼。相反,你想做什麼?根據您的要求(即有多大,你希望你的隊列獲得等),也可能是完美的罰款來實現您的隊列用一個簡單的單元陣列:

>> queue = {}; % create empty queue 
>> queue{end+1} = x; % push x onto queue 
>> q(1) = []; % pop top element from queue 

但是把序列將採取二次時間,對嗎?是的,但是O(n^2)上的常量實際上很小,所以這個實現會在速度上擊敗許多其他非MEXED實現。

+0

我基本上試圖使用線性程序求解器來實現一個整數程序求解器。我嘗試了這一點,它的速度不夠快,無法滿足我的需求。有沒有其他方法可以解決這個問題? – subzero