A grafikon ábrázolása a szomszédsági listákban a java-ban

ArrayList[] graph = új ArrayList [N];

Az a tény, hogy a Java objektumok nem csak egy osztály, hanem osztályok közül, a megfelelő paraméterekkel történő hívás módszerek és hozzárendelés nem ellenőrzött, csak néha a fordító dob warning'i arról, amit nem tudom, mi ez az objektum lehetőséget. Létrehozhat egy ArrayList-et és hozzárendelje az ArrayListhez és össze fog állni. Futtatáskor a következő történik: amikor egy paraméterezett módszert hívunk, akkor ellenőrizzük, hogy az objektumparaméter megegyezik-e az ott várható paraméterrel, hiba esetén egy bizonyos RuntimeException keletkezik.







Valami amit nem vettem észre, és ettől elveszett a figyelmeztetés: "Megjegyzés: Main.java nem ellenőrzött vagy nem biztonságos műveleteket használ". Vagy inkább fenn kell maradnia, és a kijelentések, hogy a Java jobb, mint plusz, garantálja a végrehajtás biztonságát, meg kell osztani a 0x100-at?

Teljes szöveg -
[Cut]
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Queue;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Fő statikus int nextInt (StreamTokenizer in) próbálja meg in.nextToken ();
return (int) in.nval;
> fogás (IOException ex) Logger.getLogger (Main.class.getName ()) .log (Level.SEVERE, null, ex);
visszatérés 0;
>
>
public static void main (String [] args) dob FileNotFoundException StreamTokenizer in = új StreamTokenizer (új FileReader ( "INPUT.TXT"));
PrintWriter out = új PrintWriter (új fájl ("output.txt"));
int TEST_NUM = nextInt (be);
az (int the_test = 0; the_test ArrayList[] graph = új ArrayList [N];
az (int i = 0; i grafikon [i] = új ArrayList();
az (int k = 0; k grafikon [u] .add (új Integer (v));
>
int [] st = új int [N];
int [] d = új int [N];
Arrays.fill (st, 0);
Arrays.fill (d, 987654321);






int start = nextInt (be);
st [start] = 1;
d [start] = 0;
sorban áll qqq = új ArrayDeque();
qqq.add (start);
míg (! qqq.isEmpty ()) int u = qqq.poll ();
a (int w. (ArrayList) grafikon [u])
ha (st [w] == 0) qqq.add (w);
st [w] = 1;
d [w] = d [u] +1;
>
>
az (int i = 0; i out.print (d [i] + "");
out.println ();
>
out.close ();
>
>

ArrayList[] graph = új ArrayList [N];

@SuppressWarnings ("nem engedélyezett")
ArrayList[] graph = új ArrayList [N];

Már így is ez a figyelmeztetés gyűlölködik

Ne csináld újra, használj valamit, mint ideone vagy paste.pocoo.org

Először is, generikusan gyakran vannak nem biztonságos öntvények, és figyelmeztetés - és nem juthat el bárhova. Másodszor, a Java 7-ben a fordító ezeket az eseteket biztonságosnak kezeli, és nem ír semmit. Harmadszor, a biztonság akkor jelentkezik, amikor a program nem tartozik a rossz művelethez, de kivételt hoz létre, amelyet elkapnak és feldolgoznak. Hasonlóképpen megkérheted, hogy tesztelheted a 0 osztással vagy az Integer x = (Integer) obj típusú hozzárendelésekkel való megosztást.

"a biztonság akkor jelentkezik, ha a program nem tartozik a rossz akcióba, de kivételt hoz létre, amelyet elkapnak és feldolgoznak"
Hol helytelenül bánom, ha figyelembe vesszük, hogy a fordító egyáltalán nem helyezi el a helytelen cselekvést, még biztonságosabb?

Általában megváltoztathatja a fordítót. Ezért minden akadályt teljesen kijátszhat, ha letiltja az ellenőrzéseket a JVM szintjén.

A leírások leírása
ArrayList[] graph = új ArrayList [N];
-- Nagyon köszönöm, úgy tűnik, ez 99% -os kérdés.

És az üzenet többi részéről - valami rosszul íródott, vagy nem jól olvastam, de először teljesen nem értettem. Különösen megzavarta az állítás: "ArrayList-t hozhat létre és hozzárendelje az ArrayListhez és össze fog állni. ”.

Ahhoz, hogy azokat össze lehessen rendelni, ezt a Raw Type konverzióval kell végrehajtania:

lista listI = új LinkedList();
listI.add (7);
Lista lista = lista;
lista listS = lista;
listS.add ("Java");
System.out.println (listS);

A fordítás során nem lesz hiba, de figyelmeztetés jelenik meg a -XLint: jelöléssel

Ez a régebbi verziókkal való kompatibilitás (az 5. Java előtt) történik.

Én általában a pluses vektorra írtam> de valahogy nemrég hallottam ezt a vektort> típus hatékonyabb. Ő maga nem vette észre ezt, de valamilyen oknál fogva hitte. A lista-, sőt talán sok memóriát megy mutató, memória kell edzeni, és most (nem csak 15 évvel ezelőtt) kiemelkedik, de nem egy bájt és néhány bekezdésben, vagy akár mi étkezések stb
Azonban az ArrayList vagy a LinkedList egyáltalán nem befolyásolja a fő kérdés lényegét.

Mi nem felel meg az ArrayList tömbnek?
Egy műveletet könnyebb végrehajtani egy grafikonnal.
Ami a performansz az azonos, de általában a szomszédsági lista egy potenciális előny, hogy a szomszédos, a tetejére a bordák következetesen ellenzi egy nagy lista, ahol nincs ilyen sorrendben.
Ha az élek teljes eltávolításra szorulnak, akkor hasonlóan készíthet egy sor HashSet'ov-ot, ha a teljesítmény nem túl fontos.
Érdekes kérdés az, hogyan lehet gyors szerkezetet hozni az élek / csúcsok hozzáadásához / eltávolításához.




Kapcsolódó cikkek