2013-04-01 33 views
5

Ich versuche, eine Liste und nicht nur eine Nummer hinzuzufügen und abzuweisen, wenn Sie also mit einem Beispiel antworten, wenn Sie ein Objekt wie mein Gebrauchtwagenbeispiel oder ein Obst oder etwas verwenden könnten I ' Ich habe überall nachgesehen, und alle Beispiele, die ich sehe, fügen einer Liste nur Zahlen hinzu.
Im Versuch, einig Java-Code in scala das Java-Code im Problem beim Konvertieren zu konvertierenHinzufügen eines Objekts zum Auflisten in scala

ArrayList usedCarList = new ArrayList(); 
UsedCars usedCar = new UsedCars(); 
usedCarList.add(usedCar); 

Jetzt habe ich ein paar Beispiele gesucht, aber sie scheinen nicht einmal ich ein Objekt zu verwenden, beginnen zu arbeiten versuchen, dh

var b = List[Int](); 
b ::= 1; 
b ::= 2; 
b ::= 3; 

Ich habe ein paar Dinge ausprobiert 1 ist unten aufgeführt.

var usedCarList = List(); 
def addCar (usedCarList: List[UsedCars]){ 
var usedCar = new UsedCars(); 
series of set operations on the usedCar 
usedCar :: usedCarList; 
println(usedCarList.length); 
} 

wenn ich die Größe der Liste überprüfen Sie die immer leer

+0

Auch ist mir egal, wo es es in die Liste einfügt, da seine Lage mir egal ist. – Jeremy

+0

Aus den Kommentaren ist das obige nicht, wie Sie den Code verwenden - stattdessen deklarieren Sie ein "var" und übergeben es als Parameter für etwas anderes, um es zu ändern, oder? Bitte bearbeiten Sie die Frage, um anzugeben, was Sie gerade tun. –

+0

Entschuldigung, ich habe die Hauptfrage bearbeitet, um zu sehen, wie mein Code tatsächlich aussieht. Also ja, ich erstelle die Liste in einer Hauptmethode und übergebe sie an diese addCar-Funktion, wo usedCars zur Liste hinzugefügt wird. Ähnlich habe ich eine removeCar Funktion, die Autos von der Liste entfernt. – Jeremy

Antwort

3

Es gibt einen grundlegenden Unterschied zwischen Scalas List und Javas ArrayList: Scalas List ist unveränderlich.

Nicht einfach nur lesen - eine schreibgeschützte Sammlung in Java kann immer noch von jedem geändert werden, der sie erstellt hat. In Scala kann ein List nicht durch irgendjemand geändert werden.

Nun lassen Sie uns das mit dem Beispiel, das Sie gezeigt haben, "funktioniert": b ::= 1. Dieses Beispiel entspricht b = 1 :: b, es ändert also nicht die Liste. Stattdessen erstellt es eine neue Liste und weist sie b zu. Das mag ineffizient klingen, aber es ist tatsächlich ziemlich schnell, weil List eine persistente Datenstruktur ist (schau das für mehr Information an).

Die offensichtlichste Antwort auf Ihre Frage ist daher, eine andere Art von Datenstruktur zu verwenden. Scala am nächsten entspricht ArrayList ist die ArrayBuffer.

Es gibt jedoch eine andere Möglichkeit, die verfolgt werden kann. Anstatt die Liste zu ändern und nichts zurückzugeben, geben Sie eine neue Liste zurück. Das mag andere Änderungen an der Struktur des Codes erfordern, und da es keine Details darüber gibt, werde ich nicht darüber spekulieren, was sie sein könnten.

4

Es gibt wandelbar (wie scala.collection.mutable.MutableList) und unveränderlich Listen (scala.collection.immutable.List). Was Sie verwenden, sind unveränderbare Listen. Wenn Sie einfach :: für ein Element aufrufen, wird eine neue Instanz mit dem hinzugefügten Element zurückgegeben, der zugrunde liegende Wert wird jedoch nicht geändert. Sie würden haben entweder ein var mit einer unveränderlichen Liste verwenden oder ein veränderlich man wie folgt verwenden:

scala> import scala.collection._ 
import scala.collection._ 

scala> val list = mutable.MutableList[UsedCars]() 
list: scala.collection.mutable.MutableList[UsedCars] = MutableList() 

scala> list += new UsedCars() 
res0: list.type = MutableList([email protected]) 

scala> list.size 
res1: Int = 1 

See su-Antwort die Referenz mit den unveränderlichen Listen für die Neuzuweisung.

+0

Wie funktioniert das, wenn die Liste an Funktionen übergeben wird? Ist der Parameter in der Funktion nur eine Liste? – Jeremy

+0

Sie können 'toList' auf einer Instanz von' MutableList' aufrufen, die es in eine Instanz von 'List' konvertiert, die Sie weitergeben können. Sehen Sie das für mehr auf "MutableList" und Alternativen: http://StackOverflow.com/Questions/5446744/Difference-between-mutelistlist-and-listbuffer –

+0

Ich denke, eine bessere Erklärung, wie mein Code organisiert ist, wird helfen, zu bestimmen, wie mach das so. Meine Hauptmethode ist, wo die Liste erstellt wird, es wird an die Funktion addCar übergeben, wo ein Auto der Liste hinzugefügt wird. Weitere Funktionen dienen dazu, die Gebrauchtwagen in der Liste anzuzeigen und Autos aus der Liste zu entfernen. was ist einfacher mit der veränderbaren oder unveränderlichen Liste zu tun? also, wenn ich das veränderbare Beispiel folgte, wie würde die Funktion "addCars" aussehen wie – Jeremy

Verwandte Themen