2014-11-05 77 views
1

我有一個關於hashSet的問題。 我正在嘗試製作聊天程序並希望實時更新。HashSet和顯示在JList上

目前,我使用Vector和Multi線程來存儲用戶名。順便說一下,我可以使用HashSet而不是Vector嗎?

我簡單的代碼處理矢量低於,

private JList userListMain = new JList(); 
private Vector userVC = new Vector(); 

userVC.add(UserAll+" (Me)"); 
userListMain.setListData(userVC); 

有什麼辦法來改變矢量在HashSet的?

+0

編寫你自己的'ListModel'支持'HashSet' ... – MadProgrammer 2014-11-05 05:48:45

+0

@MadProgrammer:我不認爲你可以用HashSet。它必須是一個像TreeSet那樣的NavigableSet。 – 2014-11-05 05:49:28

+0

@HovercraftFullOfEels沒有說這將是一個好主意;) - 實際上,這兩個問題之一就是能夠按順序獲取各個元素...... – MadProgrammer 2014-11-05 05:51:14

回答

2

不,你不能。如果您不想使用Vector,那麼您將不得不創建自己的ListModel類,即實現ListModel接口的類,並且此接口的一個要求是可以可靠地排序元素。 HashSet對此不起作用,但TreeSet或其他SortedSet可能會用作模型的數據核心。請注意,這當然不像創建TreeSet並將其傳遞到JList的構造函數那樣簡單,並且您的模型類應該可以擴展AbstractListModel<E>以獲得所有可用的偵聽器處理和通知處理代碼。

+2

我想說任何類型的集合的問題都可以支持'getElementAt'方法,因爲我知道任何'Set'實現都沒有任何'get'方法。我想你可以用某種'List'包裝它,但這是一個昂貴的操作。 – MadProgrammer 2014-11-05 05:54:59