Re: [array / List]Unknown number of objects
Knute Johnson wrote:
Daniel Moyne wrote:
Carl wrote:
Daniel Moyne wrote:
I want to get an array of strings from a method ; as this array has an
unknown number of elements can I use instaed a List to dynamically
build the List and then when finished transform the List into an array
in return ?
Sure, see:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html#toArray(T[])
Carl,
on my way to get a "return array" I tried to compile this found on the
net :
import java.util.ArrayList;
import java.util.List;
/** List to array */
public class ToArray {
public static void main(String[] args) {
List list = new ArrayList();
list.add("Blobbo");
list.add("Cracked");
list.add("Dumbo");
// list.add(new Date()); // Don't mix and match!
// Convert a collection to Object[], which can store objects
// of any type.
Object[] ol = list.toArray();
System.out.println("Array of Object has length " + ol.length);
// This would throw an ArrayStoreException if the line
// "list.add(new Date())" above were uncommented.
String[] sl = (String[]) list.toArray(new String[0]);
System.out.println("Array of String has length " + sl.length);
}
}
but I have these error messages that do not make sense to me :
root@azun:/usr/local/Java/genj/report#
$JAVA_HOME/bin/javac -classpath /usr/local/Java/genj/report ToArray.java
Note: ToArray.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
root@azun:/usr/local/Java/genj/report#
$JAVA_HOME/bin/javac -Xlint:unchecked -classpath
/usr/local/Java/genj/report ToArray.java
ToArray.java:8: warning: [unchecked] unchecked call to add(E) as a member
of the raw type java.util.List
list.add("Blobbo");
^
ToArray.java:9: warning: [unchecked] unchecked call to add(E) as a member
of the raw type java.util.List
list.add("Cracked");
^
ToArray.java:10: warning: [unchecked] unchecked call to add(E) as a
member of the raw type java.util.List
list.add("Dumbo");
^
ToArray.java:20: warning: [unchecked] unchecked call to <T>toArray(T[])
as a member of the raw type java.util.List
String[] sl = (String[]) list.toArray(new String[0]);
^
4 warnings
And it is supposed to work according to his author.
If you have explanations help would be appreciated.
Reagrds.
Daniel:
You are having problems because you appear to be using a compiler newer
than when the sample program was written. Take a look at mine below and
I think it will solve all of your questions.
import java.util.*;
public class test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Blobbo");
list.add("Cracked");
list.add("Dumbo");
Object[] obj = list.toArray();
for (int i=0; i<obj.length; i++)
System.out.println((String)obj[i]);
String[] array = list.toArray(new String[list.size()]);
System.out.println("array has length " + array.length);
}
}
Knute,
thanks for your help so basically it was a proper list of import ; error
messages provided by javac should be clearer !.
As the main objective of my question was to get a way to feed an array of
unknown number of elements and therefore use an ArrayList, here is my piece
of work where I handle data though an ArrayList and return an array ; it
works neatly.
public String[] getAllClassName(Indi indi) {
/* check for existing classes */
/* not very efficient as we do not have a class names list */
Locale frLocale = new Locale("fr","FR","fr_FR.UTF-8");
Collator myCollator = Collator.getInstance(frLocale);
ArrayList<String> classnamelist = new ArrayList<String>();
String classname;
Boolean errorflag=false;
Property classnameproperties[];
Indi indi_;
Gedcom gedcom=indi.getGedcom();
Collection indis=gedcom.getEntities(Gedcom.INDI);
for (Iterator it=indis.iterator(); it.hasNext();) {
/* we get all _CLAS properties from all INDI's */
indi_=(Indi)it.next();
/* we get all _CLAS property values from all INDI's */
classnameproperties=indi_.getProperties(ClassNameTag);
/* if no _CLAS tags we do nothing */
if (classnameproperties.length != 0) {
/* there are _CLAS tags */
/* we want to collect the _CLAS tag value */
for (int i=0; i<classnameproperties.length; i++) {
classname=classnameproperties[i].getValue();
if (!classnamelist.contains(classname)) {
/* classname not included yet in classnamelist */
/* we add it */
classnamelist.add(classname);
}
}
}
}
/* we sort the arraylist alphabetically */
Collections.sort(classnamelist,myCollator);
/* we return an array */
return classnamelist.toArray(new String[classnamelist.size()]);
}
Thanks again !
Daniel.