Doppelte Werte in der Set-Kollektion?
Ist es möglich, die doppelte Werte in der Set-Kollektion?
Gibt es eine Möglichkeit, um die Elemente einzigartig und haben einige Exemplare von Ihnen?
Gibt es irgendwelche Funktionen, die für Set-Kollektion für dass doppelte Werte?
Warum möchtest du das speichern mehrerer Werte in einem Satz? Vielleicht ein Beispiel, was Sie zu erreichen versuchen, würde helfen.
Ich glaube, Sie missverstanden die ganze Bedeutung des Begriffs Satz. Eine Liste verwenden, wenn Sie möchten Duplikate.
Ich glaube, Sie missverstanden die ganze Bedeutung des Begriffs Satz. Eine Liste verwenden, wenn Sie möchten Duplikate.
InformationsquelleAutor Johanna | 2010-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schon überlegt, mit einem java.util.Liste statt?
Ansonsten würde ich empfehlen, eine Multiset von Google Guava (der Nachfolger Google Collections, die diese Antwort ursprünglich empfohlen -ed.).
Ihre Multiset link verweist auf eine alte version der source-code. Hier ist ein link zu der neuesten javadoc statt: guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/...
Rojer ist richtig. Versuchen Sie java.util.Liste (bevorzugt) einige Drittanbieter-Bibliothek. Abgesehen von den google-collections-API, die Sie verwenden können, Apache Commons Collections ohne Benutzername/Passwort. Siehe meine Antwort unten.
Huh? Was muss einen Benutzernamen und ein Passwort? Auch ich würde definitiv empfehlen, google-collections/guava über Apache-Commons-wenn auch nur, weil es nutzt generics.
InformationsquelleAutor Schildmeijer
Sehr definition des Satzes verbietet Duplikate. Ich denke, vielleicht möchten Sie verwenden eine andere Datenstruktur, wie ein Liste, die es erlauben, dups.
Wenn Sie aus irgendeinem Grund wirklich tun speichern müssen Duplikate in ein set, werden Sie entweder müssen, wickeln Sie Sie in irgendeine Art von Halter-Objekt, sonst überschreiben Sie equals() und hashCode() der model-Objekte, so dass Sie beurteilen nicht als gleichwertig (und auch , dass wird scheitern, wenn Sie versuchen, zu speichern Referenzen auf das gleiche physikalische Objekt mehrfach).
Ich glaube, Sie brauchen, um neu zu bewerten, was Sie hier versuchen zu erreichen, oder wenigstens erklären, es deutlicher zu uns.
InformationsquelleAutor George Armhold
Aus den javadocs:
Also, wenn Sie Ihre Objekte zu überschreiben .equals (), so dass es unterschiedliche Werte zurückgeben, für was auch immer Objekte, die Sie beabsichtigen, zu speichern, dann könnte man Sie separat speichern, in einer
Set
(sollten Sie auch überschreiben Sie hashcode ()).Jedoch die definition von
Set
in Java ist,Also bist du wirklich besser dran mit einem
List
oder etwas anderes hier. Vielleicht einMap
, wenn Sie möchten, speichern Sie doppelte Werte, basierend auf verschiedenen Tasten.InformationsquelleAutor Cuga
Sonne die Sicht auf "Taschen" (auch als multimengen):
(Quelle; Hinweis: es ist alt und möglicherweise überholt-ed.)
Abgesehen von Google collections API, die Sie verwenden können, Apache Commons Collections.
Apache Commons Collections:
http://commons.apache.org/collections/
Javadoc für
Tasche
Was Sonne bedeutet im wesentlichen in der obigen Aussage ist, dass es ist sehr selten für diese Art von Szenario auftreten, aber wenn einige Anwendung wirklich brauchen, so etwas wie diese dann umgesetzt werden können, durch die Gewohnheit der Mode oder mit third-party Bibliotheken (z.B. Apache Sammlungen oder Google collections), das tut es eher als Poltern core-API. Und ich glaube nicht, dass die Sonne sich verändert hat diese Ansicht jedenfalls, als "Taschen" (auch als multimengen) sind noch nicht Bestandteil der JRE als der neuesten Java-6.
InformationsquelleAutor Gladwin Burboz
Ich glaube nicht, dass Sie doppelte Werte in einem Satz. Ein Satz ist definiert als eine Sammlung von eindeutigen Werten. Sie können es besser mit einer ArrayList.
InformationsquelleAutor Dan Polites
Diese klingen wie interview-Fragen, so werde ich Sie beantworten Ihnen gerne Fragen im interview...
Ja, aber es erfordert, dass die person, die die Umsetzung der
Set
gegen die design Vertrag auf dieSet
gebaut wird. Im Grunde, ich könnte schreiben eine Klasse, die Sie erweitertSet
und nicht durchsetzenSet
's verspricht.Neben, anderen Verletzungen sind möglich. Ich könnte mit einem
Set
Umsetzung, die sich auf JavahashCode()
Vertrag. Dann, wenn ich einObject
gegen Java hashcode-Vertrag, ich könnte in der Lage sein, um Platz zwei Objekte in dem set sind gleich, aber yeild unterschiedliche hashcodes (weil Sie möglicherweise nicht überprüft werden, in der Gleichheit gegen alle anderen aufgrund in verschiedenen hash-Eimer-Ketten.Es im Grunde hängt davon ab, wie Sie definieren Einzigartigkeit. Wenn ein Objekt seine Einzigartigkeit wird bestimmt durch seinen Wert, dann kann man mehrere Kopien der gleichen einzigartigen Objekt; jedoch, wenn das Objekt seine Einzigartigkeit wird bestimmt durch seine Instanz, dann wird es per definition nicht möglich sein würde, haben mehrere Kopien des gleichen Objekts. Sie können jedoch mehrere Referenzen zu Ihnen.
Den
Set
- Schnittstelle keine Funktionen für die Erkennung /reporting Duplikate; es ist jedoch auf der Grundlage der Sammlungen Schnittstelle, die zur Unterstützung der Liste interface, so ist es möglich, pass Duplikate in ein Set, wird jedoch ordnungsgemäß umgesetztSet
einfach ignorieren die Duplikate, und präsentieren Sie eine Kopie von jedem element bestimmt eindeutig sein.InformationsquelleAutor Edwin Buck
Glaube ich nicht. Der einzige Weg wäre die Verwendung einer Liste. Sie können auch den trick mit der Funktion equals(), hashcode() oder compareTo (), aber es wird ankward.
InformationsquelleAutor Kartoch
KEINE chance.... Sie können keine doppelten Werte in der SET-Schnittstelle,...
Wenn Sie wollen Duplikate dann können Sie versuchen, Array-Liste
InformationsquelleAutor giri
Wie bereits erwähnt wählen die richtige Kollektion für die Aufgabe und wahrscheinlich auch eine Liste, was Sie brauchen. Messing mit der equals(), hashcode() oder compareTo() zu brechen, Identität ist im Allgemeinen eine schlechte Idee, einfach zu Keil eine Instanz in die falsche Sammlung, um mit zu beginnen. Schlimmer noch: es kann brechen code in anderen Bereichen der Anwendung, hängt davon ab, diese Methoden der Herstellung gültigen Vergleich der Ergebnisse und sehr schwer zu Debuggen oder die Spur zu solche Fehler.
InformationsquelleAutor VHF
Diese Frage wurde mir auch in einem interview. Ich denke, die Antwort ist, natürlich Setzen nicht erlauben doppelte Elemente und stattdessen ArrayList oder andere Sammlungen benutzt werden sollte für die gleiche, die Sie jedoch überschreiben von equals() für den Typ des Objekts gespeichert wird, in dem festgelegt wird, können Sie Sie Bearbeiten, auf die Vergleich-Logik. Und daher können Sie speichern, duplizieren von Elementen im Satz. Seine mehr ein hack würde es erlauben, nicht-eindeutige Elemente in der Menge und natürlich ist nicht empfohlen in der Produktion-level-code.
InformationsquelleAutor IndicCrusader
Können Sie dies durch überschreiben von hashcode wie unten angegeben:
Dies verstößt gegen nachbedingungen von hashcode, z.B., dass Sie hartnäckig für jedes Objekt... das ist eine etwas umständliche Art zu sagen: "dies ist ein Total, vollkommen gebrochen, die Sie können nicht wirklich etwas tun."
Das ist ziemlich hässlich. Es bricht den Vertrag von hashCode() und equals().
InformationsquelleAutor The PowerHouse
a.equals(b)
gibt false zurück. Ich würde auch empfehlen, tun einige code-Formatierung.Format, - code und erklären, was es tut.
Während dieses code-snippet lösen können, die Frage, einschließlich einer Erklärung die wirklich hilft, zu verbessern, die Qualität Ihrer post. Denken Sie daran, dass Sie die Beantwortung der Frage für den Leser in der Zukunft, und die Menschen vielleicht nicht wissen, die Gründe für deinen code-Vorschlag.
InformationsquelleAutor pawan