y ass - web viewtelpas datu datu bāzes realizācijas piemērs. y ass....
TRANSCRIPT
1
Telpas datu datu bāzes realizācijas piemērs
Y ass 20
18
16
14
12
10
8
6
4 2 0
2 4 6 8 10 12 14 16 18 X ass
Slānis – mājas (poligoni):1. MĀJA1 1,0, 1,4, 5,4, 5,0, 1,02. MĀJA2 7,0, 7,4, 11,4, 11,0, 7,03. MĀJA3 13,0, 13,4, 17,4, 17,0, 13,04. SKOLA 1,10, 1,19, 9,19, 9,10, 7,10, 7,12, 3,12, 3,10, 1,105. BASEINS 10,14, 10,19, 14,19, 14,14, 10,146. VEIKALS 15,8, 15,19, 19,19, 19,8, 15, 87. KIOSKS 10,8,10,11, 13,11, 13,8, 10,8
Slānis – ielas (taisnes nogriežņu virknes):8. IELA1 0,6, 12,6, 19,6 20,69. IELA2 12,0, 12,610. IELA3 19,0, 19,6, 19,20
Slānis – Koki (riņķis, kuru definē trīs punkti):1. KOKS1 3,8.5, 3,9,5, 3.5,9 2. KOKS2 7,8.5, 7,9.5, 7.5,9
S K O L A B A S E VI EN IS K
AL
K I - SO S -K S
K O K S 1 K O K S 2
I E L A 1 I E L A 2 I E L A 3
M Ā J A M Ā J A M Ā J A1 2 3
2
Telpas datu datu bāzes slāņa tabulu izveidošana
1. slāņa definēšana - celtnescreate table CELTNES (C_NUM number CONSTRAINT Ier_PA_Celtnes PRIMARY KEY,GEOMETRIJA MDSYS.SDO_GEOMETRY,C_NOS varchar2(20) );
2. slāņa definēšana - ielascreate table IELAS (I_NUM number CONSTRAINT Ier_PA_Ielas PRIMARY KEY,GEOMETRIJA MDSYS.SDO_GEOMETRY,I_NOS varchar2(20) );
3. slāņa definēšana - kokicreate table KOKI (K_NUM number CONSTRAINT Ier_PA_Koki PRIMARY KEY,GEOMETRIJA MDSYS.SDO_GEOMETRY,K_NOS varchar2(20) );
3
Metadatu (slāņu dimensiju datu) ievade
delete from USER_SDO_GEOM_METADATA where TABLE_NAME = 'CELTNES';
delete from USER_SDO_GEOM_METADATA where TABLE_NAME = 'IELAS';
delete from USER_SDO_GEOM_METADATA where TABLE_NAME = 'KOKI';
insert into USER_SDO_GEOM_METADATA(TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES('CELTNES', 'GEOMETRIJA', MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X', 0, 20, 0.05),MDSYS.SDO_DIM_ELEMENT('Y', 0, 20, 0.05)), NULL);
insert into USER_SDO_GEOM_METADATA(TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES('IELAS', 'GEOMETRIJA', MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X', 0, 20, 0.05), MDSYS.SDO_DIM_ELEMENT('Y', 0, 20, 0.05)), NULL);
insert into USER_SDO_GEOM_METADATA(TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES('KOKI', 'GEOMETRIJA', MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X', 0, 20, 0.05), MDSYS.SDO_DIM_ELEMENT('Y', 0, 20, 0.05)), NULL);
4
Informāciju par visiem ģeometriju slāņiem iespējams iegūt no datu bāzes datu vārdnīcas skata USER_SDO_GEOM_METADATA
SELECT * FROM USER_SDO_GEOM_METADATA;
5
Datu ievade tabulā CELTNESinsert into CELTNES values(1,MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 3, 1),MDSYS.SDO_ORDINATE_ARRAY(1,0, 1,4, 5,4, 5,0, 1,0)), 'MĀJA1');
insert into CELTNES values(2,MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 3, 1),MDSYS.SDO_ORDINATE_ARRAY(7,0, 7,4, 11,4, 11,0, 7,0)), 'MĀJA2');
insert into CELTNES values(3,MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 3, 1),MDSYS.SDO_ORDINATE_ARRAY(13,0, 13,4, 17,4, 17,0, 13,0)), 'MĀJA3');
insert into CELTNES values(4,MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 3, 1),MDSYS.SDO_ORDINATE_ARRAY(1,10, 1,19, 9,19, 9,10, 7,10, 7,12,3,12, 3,10, 1,10)), 'SKOLA');
insert into CELTNES values(5,MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 3, 1),MDSYS.SDO_ORDINATE_ARRAY(10,14, 10,19, 14,19, 14,14, 10,14)), 'BASEINS');
insert into CELTNES values(6,MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 3, 1),MDSYS.SDO_ORDINATE_ARRAY(15,8, 15,19, 19,19, 19,8, 15,8)), 'VEIKALS');
insert into CELTNES values(7,MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 3, 1),MDSYS.SDO_ORDINATE_ARRAY(10,8, 10,11, 13,11, 13,8, 10,8)), 'KIOSKS');
6
Tabulas CELTNES datu izvadeselect A.GEOMETRIJA.SDO_ORDINATESfrom CELTNES A;
7
Datu ievade tabulā IELAS
insert into IELAS values(1,MDSYS.SDO_GEOMETRY(2002, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 2, 1),MDSYS.SDO_ORDINATE_ARRAY(0,6, 12,6, 19,6, 20,6)), 'IELA1');
insert into IELAS values(2,MDSYS.SDO_GEOMETRY(2002, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 2, 1),MDSYS.SDO_ORDINATE_ARRAY(12,0, 12,6)), 'IELA2');
insert into IELAS values(3,MDSYS.SDO_GEOMETRY(2002, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 2, 1),MDSYS.SDO_ORDINATE_ARRAY(19,0, 19,6, 19,20)), 'IELA3');
select A.GEOMETRIJA.SDO_ORDINATES from IELAS A;
8
Datu ievade tabulā KOKI
insert into KOKI values(1,MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 3, 4),MDSYS.SDO_ORDINATE_ARRAY(3,8.5, 3.5,9, 3,9.5 )), 'KOKS1');
insert into KOKI values(2,MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 3, 4),MDSYS.SDO_ORDINATE_ARRAY(7,8.5, 7.5,9, 7,9.5)), 'KOKS2');
select A.GEOMETRIJA.SDO_ORDINATES from KOKI A;
9
Slāņu grafisko indeksu izveidošana
Fiksētā indeksa veidošana:
create index IND_CELTNES ON CELTNES(GEOMETRIJA)indextype is MDSYS.SPATIAL_INDEX parameters ('SDO_LEVEL = 4');
Hibrīda tipa indeksa veidošana:
create index IND_KOKI ON KOKI(GEOMETRIJA)indextype is MDSYS.SPATIAL_INDEX parameters ('SDO_LEVEL = 4, SDO_NUMTILES =4');
R-tree koka indeksa veidošana:
create index IND_IELAS ON IELAS(GEOMETRIJA)indextype is MDSYS.SPATIAL_INDEX;
10
Ievadīto datu pārbaude
11
Ievadīto datu vizualizācija ar Map View programmu (iekļauta vizualizācijas programma)
View Map View
12
13
14
15
Java Developer Kit (JDK) instalēšana un sistēmas parametru vērtību norādīšana
In setting up JDK and Java applications, you will encounter these environment variables: PATH, CLASSPATH, JAVA_HOME and JRE_HOME. In short:1) PATH: maintains a list of directories. The OS searches the PATH entries for executable programs, such as Java Compiler (javac) and Java Runtime (java).2) CLASSPATH: maintain a list of directories (containing many Java class files) and JAR file (a single-file archive of Java classes). The Java Compiler and Java Runtime searches the CLASSPATH entries for Java classes referenced in your program.3) JAVA_HOME and JRE_HOME: maintain the locations of JDK and JRE installed directory, respectively.
Set the PATH environment variable if you want to be able to conveniently run the executables (javac.exe, java.exe, javadoc.exe, and so on) from any directory without having to type the full path of the command. If you do not set the PATH variable, you need to specify the full path to the executable every time you run it, such as:C:\Java\jdk1.7.0\bin\javac MyClass.javaThe PATH environment variable is a series of directories separated by semicolons (;). Microsoft Windows looks for programs in the PATH directories in order, from left to right. You should have only one bin directory for the JDK in the path at a time (those following the first are ignored), so if one is already present, you can update that particular entry.The following is an example of a PATH environment variable:C:\Java\jdk1.7.0\bin;C:\Windows\System32\;C:\Windows\;C:\Windows\System32\Wbem
The class path is the path that the Java Runtime Environment (JRE) searches for classes and other resource files.
Class path entries can contain the base name wildcard character (*), which is considered equivalent to specifying a list of all of the files in the directory with the extension .jar or .JAR. For example, the class path entry mydir/* specifies all JAR files in the directory named mydir. A class path entry consisting of * expands to a list of all the jar files in the current directory. Files are considered regardless of whether they are hidden (have names beginning with '.').
16
Ģeometriskās datu bāzes ģeometriju vizualizēšana ar GeoRaptor
Lai vizualizētu datus, var izmantot SQL Developer paplašinājumu Oracle Georaptor. Šis rīks ir brīvi pieejams oficiālā lapā, kur arī izvietotas pamācības rīka izmantošanai:(http://sourceforge.net/apps/mediawiki/georaptor/index.php?title=Main_Page).
Lai izmantotu Georaptor, vispirms ir jāinstalē SQL Developer. Pēc tā instalācijas, Georaptor instalējas kā papildus spraudnis PlugIn.
Georaptor spraudni var instalēt sekojoši: 1. Click menu item "Help" and "Check for update"2. Dialog "Check for Updates - Welcome" Click on button "Next". 3. Dialog "Check for Updates - Step 1 of 3: Source" Add new Update center. Click on button "Add" and insert values:
Name: GeoRaptor Location: http://georaptor.sourceforge.net/install.xml
Click "Next" when new update center is added.4. Dialog "Check for Updates - Step 2 of 3: Updates"Select "GeoRaptor" and click button "Next".5. Dialog "Check for Updates - Summary" Click button "Finish".6. After Project Raptor restart, GeoRaptor should be installed.
17
Tabulas ģeometriju ievietošana GeoRaptor grafiskajā attēlojumā
Grafiskais attēlojums
18
Norādītas visas trīs tabulas. Krāsas - Random
Krāsu norāde
19
Krāsas izvēle
Modificētais (krāsu izmaiņa)attēlojums
20
Vaicājuma veidošana
Meklēšanas vietas un apgabala izmēru norādīšana
21
Vaicājuma izpildes iegūtais rezultāts
22
Poligona izveidošdana (zīmēšana)View GeoRaptor Open Map
23
Grafiskās datu bāzes datu vizualizācija izmantojot Java klasi JGeometry
MDSYS.SDO_GEOMETRY JGeometry
java.lang.Object oracle.spatial.geometry.JGeometry
Datu bāzes sistēma
Datu bāze
Datu bāzes
vadības sistēma
SDO_GEOMETRY
Lietojums
JDBC interfeiss
JGeometry
Java2D(vizualizācija)
24
Datu bāzes objektu transformēšana Java objektos
1. Vāji tipizētās noklusētās Java klases (weakly typed default Java class) Struct (Java) vai STRUCT (Oracle) izmantošana objektu transformēšanai. Šis variants ir efektīvāks un vienkāršāks.
2. Stipri tipizētas pašveidotās Java klases (strongly typed custom Java classe) izveidošana Oracle objektiem.
Literatūra
1. R. M. Menon. Expert Oracle JDBC Programming. Apress, 2005, 744. Lpp.
2.Kuassi Mensah. Oracle Database programming using Java and Web Services. Elsevier Digital Press publications, 2006.
Programmēšanas Java objekti
Relāciju-objektu datu bāzes objekti
Javas objekts
SQL objekts
JDBC SQLData interfeiss
Objekta tipu transformāciju apraksti
JDBC
Struct (Java)STRUCT (Oracle)
Lietojums
IDE NetBeans 7.3.1
Datu bāzes sistēma
JDBC interfeiss
JDK 7
SQL Developer
DBVS
Grafikas datu bāze
Bibliotēkas
25
Grafikas datu bāzes lietojuma izveidošana izmantojot IDE rīku NetBeans
26
Nepieciešamo papildbibliotēku piesaiste
1. JGeometry tipa objektu klase:oracle.spatial.geometry.JGeometryE:\app\Janis\product\11.2.0\dbhome_1\md\jlib\sdoapi.jar;
2. Oracle JDBC draivera klase:oracle.jdbc.driver.OracleDriverE:\app\Janis\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar;
Control Panel User Accounts and Family Safety User Accounts Change my environment variables
Desktop Power User Task Menu System Advanced System Settings Environment Variables Path Edit
Control panel System and Security System Advanced System Settings Advaced Environment variables
27
DBVS Oracle draiveri
Divas vienāda nosaukuma klases
28
Grafikas datu bāzes lietojuma izveidošana izmantojot IDE rīku NetBeans
Projekts Grafika Properties
29
Grafisko datu vizualizēšanas programma
class dbc
Savienojuma ar datu bāzi objekta conn izveidošanas metode connect()
Grafisko datu (SDO_GEOMETRY) izgūšana no datu bāzes un transformācijaJGeometry tipa Javas objektos (metode getData())
Rezultātu JGeometry objektu kolekcijas saraksta iegūšanas metodes getList() izveidošana
class Vizualizacija
JGeometry objektu kolekcijas saraksta iegūšana (getList())
JGeometry objektu attēlošana
class GalvenaKlase
Jauna dbc klases objekta (dbcon) izveidošana
Savienojuma izveidošanas metodes connect() izsaukšna
Grafisko datu izgūšana no datu bāzes un transformācija (metodes getData() izsaukšana)
Grafisko datu kolekcijas saraksta iegūšana (metode getJList())
Datu vizualizācijas loga izveidošana un datu vizualizācija(metode Vizualizacija())
30
Pievienošanās datu bāzei un grafisko datu izgūšanaKlases dbc izveidošana (fails: dbc.java)
create or replace JAVA source named "dbc" as// Nepieciešamo bibliotēku (pakešu) pievienošanaimport java.sql.*; //JDBC interfeisa programmu pakete (otra javax.sql)import java.util.ArrayList; import java.util.List; import oracle.core.lmx.CoreException; import oracle.spatial.geometry.JGeometry; import oracle.sql.STRUCT; // Klases dbc izveidošana, kura:// 1) izveido metodi connect() savienojuma ar datu bāzes sistēmu izveidošanai;// 2) izveido metodi getData() grafiskos datu (SDO_GEOMETRY) // izgūšanai no datu bāzes un to transformācijai JGeometry tipa // objektos;// 3) kolekciju tipa objektu izveidošana.public class dbc { public dbc() { }
// Savienojuma objekta conn izveidošanaprivate Connection conn; // Izveido metodi connect() savienojuma ar datu bāzes sistēmu izveidošanai.public void connect() { String URL = "jdbc:oracle:thin:@localhost:1521:BAZE1";String USER = "system"; String PASS = "Janis1946"; try { conn = DriverManager.getConnection(URL, USER, PASS); } catch (SQLException e) { e.printStackTrace(); } }
// Grafisko datu slāņu tabulu nosaukumu ierakstīšana masīvāprivate String[] tblArray = {"CELTNES", "IELAS", "KOKI" };
//List – interfeiss sakārtotam sarakstam ar norādītu tipu (<JGeometry>).// Rezultātu JGeometry objektu kolelkcijas saraksta (result) definēšanaprivate List<JGeometry> result = new ArrayList<JGeometry>(0); //Rezultātu JGeometry tipa objektu kolekcijas saraksta (result) iegūšanas metodes // izveidošanapublic List<JGeometry> getJList(){ return result; }
// Anotācija brīdinājuma ziņojuma izvades aizliegšanai@SuppressWarnings("deprecation")
31
// Datu izgūšana un transformēšanapublic void getData() { for (int i = 0; i < tblArray.length; i++) { try { Statement stmt = conn.createStatement();String sql = "SELECT a.geometrija geom FROM "+ tblArray[i] + " a";ResultSet rs = stmt.executeQuery(sql);while (rs.next()) { oracle.sql.STRUCT st = (STRUCT) rs.getObject("geom"); JGeometry geom = JGeometry.load(st);result.add(geom); } } catch (SQLException e) { e.printStackTrace(); } } } }
32
Grafisko datu vizualizācijas programma
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Shape; import java.util.List; import javax.swing.JPanel; import oracle.spatial.geometry.JGeometry; import java.awt.geom.AffineTransform;
public class Vizualizacija extends JPanel { // Konstruktora metodepublic Vizualizacija (dbc dbcon) { this.dbcon = dbcon; }// Grafisko objektu (g2) attēlošanapublic void paintComponent(Graphics g) {Graphics2D g2 = (Graphics2D) g;// Koordināšu sistēmas transformācija.// Attēlojuma lauka sākuma punkta novirze uz punktu X = 0, Y = 500.AffineTransform tform = AffineTransform.getTranslateInstance(0, 500); // Attēlojumu mēroga izmaiņa (reizes). Y ass būs vērsta uz augšu.tform.scale(20, -20); // Var izmantot arī koordināšu sistēmu pagriešanu par notektu leņķi.// tform.rotate(Math.PI/2); // Pagriešana par 90 grādiem.// JGeometry objektu kolekcijas saraksta iegūšanaList<JGeometry> lst = dbcon.getJList(); // JGeometry objektu attēlošanafor(int i=0; i<=lst.size()-1; i++){ if(lst.get(i) != null){ Shape a = lst.get(i).createShape(tform); g2.draw(a); } } } private dbc dbcon; // Serializācijas versijas norāde, lai viena un tā pati versija tiktu// izmantota gan serializācijā, gan deserializācijā.private static final long serialVersionUID = 1L; }
33
Galvenās klases GalvenaKlase definēšana (GalvenaKlase.java)
import java.util.List;import javax.swing.JFrame; import javax.swing.JPanel; import oracle.spatial.geometry.JGeometry; public class GalvenaKlase { // Galvenā metode (main), kura tiek izsaukta un viss process notiek.public final static void main(String[] args) { // Jauna dbc klases objekta (savienojums ar DB, vaicājums, izgūtie dati) izveidošanadbc dbcon = new dbc(); // Savienojuma metodes ar datu bāzi (klases dbc metode) izsaukšanadbcon.connect(); // Grafisko datu izgūšana no datu bāzes un transformācija dbcon.getData(); // Grafisko datu kolekcijas saraksta iegūšanaList<JGeometry> lst = dbcon.getJList();// Jauna JPanel klases attēlojuma loga Vizualizacija tipa loga izveidošanaJPanel panel = new Vizualizacija(dbcon); // Jauna Window loga (freima) izveidošanaJFrame frame = new JFrame("JavaGeometry"); // Top level container// Loga satura izvade freimāframe.setContentPane(panel); // Freima izmēru norādeframe.setSize(500, 500); // Freima attēlošanas atļaujaframe.setVisible(true); } }
JFrame – A frame is an instance of JFrame. Frame is a window that can have title, border, menu, buttons, text fields and several other components. A Swing application must have a frame to have the components added to it.
JPanel – A panel is an instance of JPanel. A frame can have more than one panels and each panel can have several components. You can also call them parts of Frame. Panels are useful for grouping components and placing them to appropriate locations in a frame.
34
Grafikas datu bāzes lietojuma izveidošana izmantojot IDE rīku NetBeans
35
import java.sql.*; import java.util.ArrayList; import java.util.List; import oracle.core.lmx.CoreException; import oracle.spatial.geometry.JGeometry; import oracle.sql.STRUCT; public class dbc { public dbc() { }private Connection conn; public void connect() { String URL = "jdbc:oracle:thin:@localhost:1521:BAZE";String USER = "system"; String PASS = "Janis1946"; try { conn = DriverManager.getConnection(URL, USER, PASS); } catch (SQLException e) { e.printStackTrace(); } }private String[] tblArray = {"CELTNES", "IELAS", "KOKI"};private List<JGeometry> result = new ArrayList<JGeometry>(0); public List<JGeometry> getJList(){return result;} //@SuppressWarnings("deprecation") public void getData() { for (int i = 0; i < tblArray.length; i++) { try { Statement stmt = conn.createStatement();String sql = "SELECT a.geometrija geom FROM "+ tblArray[i] + " a";ResultSet rs = stmt.executeQuery(sql);while (rs.next()) { oracle.sql.STRUCT st = (STRUCT) rs.getObject("geom"); JGeometry geom = JGeometry.load(st);result.add(geom); } } catch (SQLException e) { e.printStackTrace(); } } } }
36
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Shape; import java.util.List; import javax.swing.JPanel; import oracle.spatial.geometry.JGeometry; import java.awt.geom.AffineTransform;public class Vizualizacija extends JPanel { public Vizualizacija (dbc dbcon) { this.dbcon = dbcon; }public void paintComponent(Graphics g) {Graphics2D g2 = (Graphics2D) g;AffineTransform tform = AffineTransform.getTranslateInstance(0, 500); tform.scale(20, -20); List<JGeometry> lst = dbcon.getJList(); for(int i=0; i<=lst.size()-1; i++){ if(lst.get(i) != null){ Shape a = lst.get(i).createShape(tform); g2.draw(a); } } } private dbc dbcon; private static final long serialVersionUID = 1L; }
37
import java.util.List;import javax.swing.JFrame; import javax.swing.JPanel; import oracle.spatial.geometry.JGeometry; public class GalvenaKlase { public final static void main(String[] args) { dbc dbcon = new dbc(); dbcon.connect(); dbcon.getData(); List<JGeometry> lst = dbcon.getJList();JPanel panel = new Vizualizacija(dbcon); // Augšējā līmeņa konteinersJFrame frame = new JFrame("Grafikas datu bāze"); frame.setContentPane(panel); frame.setSize(500, 500); frame.setVisible(true); } }
38
39
Paskaidrojumi
The java.util.List interface is a subtype of the java.util.Collection interface. It represents an ordered list of objects, meaning you can access the elements of a List in a specific order, and by an index too. You can also add the same element more than once to a List. Being a Collection subtype all methods in the Collection interface are also available in the List interface. Since List is an interface you need to instantiate a concrete implementation of the interface in order to use it. You can choose between the following List implementations in the Java Collections API:
1) java.util.ArrayList2) java.util.LinkedList3) java.util.Vector4) java.util.Stack
Here are a few examples of how to create a List instance: List listA = new ArrayList();List listB = new LinkedList();List listC = new Vector();List listD = new Stack();
To add elements to a List you call its add() method. This method is inherited from the Collection interface. Here are a few examples: List listA = new ArrayList();listA.add("element 1");listA.add("element 2");listA.add("element 3");listA.add(0, "element 0");
The first three add() calls add a String instance to the end of the list. The last add() call adds a String at index 0, meaning at the beginning of the list. The order in which the elements are added to the List is stored, so you can access the elements in the same order. You can do so using either the get(int index) method, or via the Iterator returned by the iterator() method. Here is how: List listA = new ArrayList();listA.add("element 0");listA.add("element 1");listA.add("element 2");
//access via indexString element0 = listA.get(0);String element1 = listA.get(1);String element3 = listA.get(2);
//access via IteratorIterator iterator = listA.iterator();while(iterator.hasNext(){ String element = (String) iterator.next();}
//access via new for-loopfor(Object object : listA) { String element = (String) object;}
When iterating the list via its Iterator or via the for-loop (which also uses the Iterator behind the scene), the elements are iterated in the same sequence they are stored in the list.
40
You can remove elements in two ways: 1. remove(Object element)2. remove(int index)remove(Object element) removes that element in the list, if it is present. All subsequent elements in the list are then moved up in the list. Their index thus decreases by 1. remove(int index) removes the element at the given index. All subsequent elements in the list are then moved up in the list. Their index thus decreases by 1.
Generic ListsBy default you can put any Object into a List, but from Java 5, Java Generics makes it possible to limit the types of object you can insert into a List. Here is an example: List<MyObject> list = new ArrayList<MyObject>();
This List can now only have MyObject instances inserted into it. You can then access and iterate its elements without casting them. Here is how it looks: MyObject myObject = list.get(0);for(MyObject anObject : list){ //do someting to anObject... }
The docs for java.io.Serializable are probably about as good an explanation as you'll get:The serialization runtime associates with each serializable class a version number, called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization. If the receiver has loaded a class for the object that has a different serialVersionUID than that of the corresponding sender's class, then deserialization will result in an InvalidClassException. A serializable class can declare its own serialVersionUID explicitly by declaring a field named "serialVersionUID" that must be static, final, and of type long:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification. However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible, since such declarations apply only to the immediately declaring class--serialVersionUID fields are not useful as inherited members.