Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Javan Vector-taulukoista

jeepatijee [07.03.2008 16:45:15]

#

Aivan aloittelijoita ollaan, että voipi olla virheitä minun tekstissä kovasti :)!

Eli olen luonut Vector-taulukon ja sekoittanut sen shuffle-metodilla. Nyt minun pitäisi järjestää se uudelleen enkä siis osaa tehdä sitä. Onko siis olemassa jotain metodia, joka osaa palauttaa taulukon alkuperäiseen järjestykseen? Tutkin äsken pari tuntia tuota Collections-luokkaa läpi, enkä löytänyt apua.

Tässäpä vielä tämä koodi:

import java.util.Vector;
import java.util.Collections;

public class Kikkailua {

	public static void main(String[] args) {

			Vector vektori = new Vector();

			vektori.add("111000111");
			vektori.add("kirjoitusta");
			vektori.add("It's alive!!");
			vektori.add("HAHAHA");

			System.out.println(vektori);

		//sekoitetaan..

			Collections.shuffle(vektori);
			System.out.println(vektori);

		//nyt pitäsi järjestää taulukko uudelleen

	}

}

Antti Laaksonen [07.03.2008 17:31:00]

#

Tarkoittaako siis alkuperäinen järjestys sitä (satunnaista) järjestystä, jossa merkkijonot alun perin lisättiin taulukkoon? Tämä tieto menetetään taulukon sekoituksessa, koska minnekään ei tallenneta merkkijonojen alkuperäisiä paikkoja. Helpoin ratkaisu on luoda toinen taulukko, jonne alkuperäisen taulukon tiedot kopioidaan ennen sekoitusta. Tästä taulukosta pystyy sitten katsomaan, millainen taulukko oli ennen sekoitusta. En tunne Javaa, joten en tiedä tarkasti, mikä metodi soveltuu taulukon kopiointiin, mutta siihen saattaa hyvin olla valmis metodi.

Sami [07.03.2008 22:01:01]

#

Riippuu aivan siitä mihin järjestykseen haluat sen vektorin. Jos tahdot sen alkuperäisen järjestyksen, niin ennen sekoitusta sinun pitää tehdä kopio siitä alkuperäisestä vektorista. Jos taas tahdot sen järjestettynä aakkosjärjestyksessä, niin voit käyttää Collections.sort-metodia.

// Luodaan vektori a
Vector<String> a = new Vector<String>();
a.add("alfa");
a.add("beta");
a.add("gamma");
a.add("delta");

// Kopioidaan vektori a vektoriin b.
Vector<String> b = new Vector<String>(a);

// Sekoitetaan
Collections.shuffle(a);

// Nyt a:ssa on "alfa", "gamma", "delta" ja "beta" satunnaisessa järjestyksessä
// b:ssä järjestys on yhä "alfa", "beta", "gamma", "delta".

Vaihtoehtoisesti vektorin sisällön voi kopioida näin:

Vector<String> a = new Vector<String>();
Vector<String> b = new Vector<String>();
a.add("alfa");
a.add("beta");
a.add("gamma");
a.add("delta");

Collections.copy(b, a);

// a:ssa ja b:ssä molemmissa on nyt  "alfa", "beta", "gamma", "delta".

Ja listan järjestäminen aakkosjärjestykseen käy näin:

Vector<String> a = new Vector<String>();
a.add("alfa");
a.add("beta");
a.add("gamma");
a.add("delta");

Collections.sort(a);
// a:ssa on nyt "alfa", "beta", "delta", "gamma".

Tai jos tarvitsee määritellä jokin muu järjestys kuin aakkosjärjestys (esim. pituusjärjestys), niin pitää määritellä oma Comparator ja kutsua metodia Collections.sort(List<T> list, Comparator<? super T> c)

jeepatijee [08.03.2008 20:10:17]

#

Kiitos vinkeistä! Käytin tuota Collections.sort-metodia, kun selvisi, että järjestys ei tarvi olla enää alkuperäinen. Mietinkin, että voikohan se olla edes mahdollista ku jonkin verran C:stä on kokemuksia..

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta