Mam , który ma klucz String
i wartość jako String
, ale osiągnąłem punkt w moim projekcie, w którym muszę mieć możliwość przechowywania wielu różnych typów danych. Na przykład, będę musiał przechowywać int
, String
, Date
itd., Wszystko w jednym Hashtable
.Czy istnieje sposób na przechowywanie wielu typów danych w jednej zmiennej hashtable?
Odpowiedz
HashTable
lub dowolny Collection Map
może obsłużyć tego, z wyjątkiem int
i innych prymitywnych typów: nie można przechowywać prymitywnych typów, tylko Object
referencje. int
będzie trzeba opakować jako obiekt Integer
.
Więc czy będę mógł pobrać go jako typ danych, który został zapisany jako? – samwell
Niezupełnie, nie - nie bez obsady, i nadal będzie wybredna.Lepiej byłoby, gdybyś korzystał z różnych map dla różnych typów, lub - jeszcze lepiej - po prostu tworząc klasę z polami o każdej z różnych nazw, zamiast mieć "Mapę", na której możesz mieć nadzieję, że wszystko jest w porządku odpowiedniego typu. –
Możesz przechowywać ogólny typ danych Object
, ale to nie zezwoli na prymitywne typy danych.
Zmień HashTable do Hashtable<String, Object>
i kiedy chcesz przechowywać int
trzeba oddać go pierwszy (lub użyć AutoCast) do Integer
. Po uzyskaniu wartości z tabeli możesz określić swój typ przez if(value instanceof String)
i tak dalej dla każdego typu.
Nie ma potrzeby typowania - autoboxing zrobi to automatycznie (Java 5+). – 01es
Ta klasa nazywa się Hashtable i wymaga dwóch parametrów, a nie jednego. –
Map<String, Object> map = new HashMap<String, Object>()
To daje mapę z klawiszami typu String i wartości typu Object, co w zasadzie oznacza żadnego potomka typu Object (Date, Integer, String itd.). Inne odpowiedzi poprawnie wskazują na to, że zamiast używać prymitywów, takich jak int, boolean, wymagane jest użycie ich odpowiedników Integer, Boolean itp.
Typ zwrotu z operacji get
na takiej mapie to Object
. W związku z tym to deweloper jest odpowiedzialny za prawidłowe przetwarzanie informacji o typie.
Dobra odpowiedź na pytanie, jaka jest różnica między Hashtable i HashMap jest podana here.
Chociaż jest to możliwe, generalnie nie jest to dobry pomysł. Częściej niż to prowadzi do wyjątków i problemów z rzutowaniem typu.
Opcja HashTable może służyć do przechowywania ogólnych obiektów w przeciwieństwie do określonych typów klas, jednak konwersja typów podczas ich pobierania nie odbywa się automatycznie.
Aby odzyskać obiekt z kolekcji, należy opracować jakąś formę procedur sprawdzania typu.
Lepiej przygotuj oddzielną kolekcję dla każdego typu klasy, który chcesz zapisać.
PS: Polecam również używanie HashMap zamiast HashTable. HashTable został wycofany.
Dzięki, że tego nie wiedziałem. – samwell
- 1. Najlepszy sposób na przechowywanie wielu flag w bazie danych
- 2. Przechowywanie różnych typów dokumentów w jednej kolekcji DocumentDb
- 3. Przechowywanie dwóch wartości zmiennoprzecinkowych w jednej zmiennej zmiennoprzecinkowej
- 4. Czy istnieje sposób zdefiniowania zmiennej w LaTeX?
- 5. Najlepszy sposób na przechowywanie danych w BoltDB
- 6. Czy istnieje sposób na przetwarzanie wielu warstw?
- 7. Mysql, przechowywanie wielu wartości w jednej kolumnie z innej tabeli
- 8. Czy istnieje sposób na ignorowanie niezgodności typów w maszynopisie?
- 9. Czy istnieje sposób na emulowanie typów liniowych w Haskell?
- 10. Czy istnieje sposób konkatowania typów anonimowych C#?
- 11. Czy istnieje struktura HashTable w Wolfram Mathematica?
- 12. Scala: czy istnieje sposób tworzenia typów wbudowanych?
- 13. Czy istnieje sposób na zanegowanie wartości logicznej zwróconej do zmiennej?
- 14. Czy istnieje sposób na utrzymanie danych HSQLDB?
- 15. Czy istnieje sposób umieszczania atrybutów na właściwościach anonimowych typów?
- 16. Czy istnieje sposób na wyłączenie automatycznej deklaracji dla nieregularnych typów?
- 17. Sprawdź, czy wartość istnieje w jednej ramce danych, czy nie.
- 18. Czy istnieje sposób na dokonywanie efektów typów danych zdefiniowanych przez użytkownika w MySQL?
- 19. Najlepszy sposób na przechowywanie haseł w bazie danych MySQL
- 20. Czy istnieje sposób na podświetlenie wielu wyszukiwań w (g) Vim?
- 21. Czy istnieje sposób na dodanie wielu odbiorników w Pythonie SMTPlib?
- 22. Najprostszy sposób na ponowne utworzenie wielu gałęzi w jednej linii
- 23. Czy istnieje sposób przetestowania zmiennej dla "isForEachable"
- 24. Najlepszy sposób na przechowywanie uporządkowanych list w bazie danych?
- 25. bash - lepszy sposób na przechowywanie zmiennej między przebiegami?
- 26. Czy istnieje sposób na rozwiązanie wielu obietnic za pomocą kątomierza?
- 27. Przechowywanie wielu wartości zmiennej $ _SESSION za pomocą PHP
- 28. Najlepszy sposób na przechowywanie uprawnień użytkownika?
- 29. Czy istnieje Pythoniczny sposób na zamknięcie zmiennej pętli?
- 30. Najlepszy sposób na przechowywanie "dodatkowych" danych użytkownika w MySQL?
Zmiana klucza na "Obiekt"? – Mysticial
Czy nie jest dobrym rozwiązaniem, aby utworzyć obiekt za pomocą polecenia get/set i dodać obiekt HashTable/ArrayList (lub) do kolekcji, która jest dla ciebie interesująca? Jeśli dodasz wiele typów danych, podczas pobierania, jeśli nie znasz dokładnego indeksu i typu danych, otrzymasz klasę wyjątku. – kosa
To brzmi jak bardzo delikatna struktura danych. Czy możesz opisać, co ogólnie chcesz osiągnąć, więc może ktoś może zaproponować sposób na lepszą strukturę danych? – Bobulous