Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #34363 > unrolled thread
| Started by | ruben safir <ruben@mrbrklyn.com> |
|---|---|
| First post | 2016-05-22 01:51 -0400 |
| Last post | 2016-05-30 22:17 -0700 |
| Articles | 18 — 9 participants |
Back to article view | Back to comp.lang.java.programmer
how does one explain this syntax? ruben safir <ruben@mrbrklyn.com> - 2016-05-22 01:51 -0400
Re: how does one explain this syntax? Martin Gregorie <martin@address-in-sig.invalid> - 2016-05-22 10:05 +0000
Re: how does one explain this syntax? Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-05-22 07:21 -0400
Re: how does one explain this syntax? Popping mad <rainbow@colition.gov> - 2016-05-22 20:21 +0000
Re: how does one explain this syntax? Lars Enderin <lars.enderin@telia.com> - 2016-05-22 22:32 +0200
Re: how does one explain this syntax? Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-05-22 17:32 -0400
Re: how does one explain this syntax? Lew <lewbloch@gmail.com> - 2016-05-23 14:36 -0700
Re: how does one explain this syntax? Lew <lewbloch@gmail.com> - 2016-05-23 14:34 -0700
Re: how does one explain this syntax? Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2016-05-22 08:41 -0700
Re: how does one explain this syntax? Robert Klemme <shortcutter@googlemail.com> - 2016-05-22 22:22 +0200
Re: how does one explain this syntax? Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2016-05-22 22:13 -0700
Re: how does one explain this syntax? Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-05-23 07:32 -0400
Re: how does one explain this syntax? Robert Klemme <shortcutter@googlemail.com> - 2016-05-23 04:57 -0700
Re: how does one explain this syntax? Popping mad <rainbow@colition.gov> - 2016-05-22 20:23 +0000
Re: how does one explain this syntax? Roedy Green <inquiry@mindprod.com> - 2016-05-30 21:51 -0700
Re: how does one explain this syntax? Roedy Green <inquiry@mindprod.com> - 2016-05-30 21:54 -0700
Re: how does one explain this syntax? Roedy Green <inquiry@mindprod.com> - 2016-05-30 22:00 -0700
Re: how does one explain this syntax? Roedy Green <inquiry@mindprod.com> - 2016-05-30 22:17 -0700
| From | ruben safir <ruben@mrbrklyn.com> |
|---|---|
| Date | 2016-05-22 01:51 -0400 |
| Subject | how does one explain this syntax? |
| Message-ID | <nhrhd5$7r6$1@reader1.panix.com> |
This passes for a demonstration and teaching example for a TreeMap
import java.util.TreeMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
public class Details {
public static void main(String args[]) {
/* This is how to declare TreeMap */
TreeMap<Integer, String> tmap =
new TreeMap<Integer, String>(); <<studdering is always good
/*Adding elements to TreeMap*/
tmap.put(1, "Data1");
tmap.put(23, "Data2");
tmap.put(70, "Data3");
tmap.put(4, "Data4");
tmap.put(2, "Data5");
/* Display content using Iterator*/
Set set = tmap.entrySet(); <<random obscure syntax... that is a
constructor for another class?
Iterator iterator = set.iterator(); <<again, twice?
while(iterator.hasNext()) {
Map.Entry mentry = (Map.Entry)iterator.next(); <<What the heck
is this?
System.out.print("key is: "+ mentry.getKey() + " & Value is:
"); <<How many levels of random systax does one need to just to do a loop?
System.out.println(mentry.getValue());
}
}
}
--
So many immigrant groups have swept through our town
that Brooklyn, like Atlantis, reaches mythological
proportions in the mind of the world - RI Safir 1998
http://www.mrbrklyn.com
DRM is THEFT - We are the STAKEHOLDERS - RI Safir 2002
http://www.nylxs.com - Leadership Development in Free Software
http://www2.mrbrklyn.com/resources - Unpublished Archive
http://www.coinhangout.com - coins!
http://www.brooklyn-living.com
Being so tracked is for FARM ANIMALS and and extermination camps,
but incompatible with living as a free human being. -RI Safir 2013
_______________________________________________
hangout mailing list
hangout@nylxs.com
http://www.nylxs.com/
[toc] | [next] | [standalone]
| From | Martin Gregorie <martin@address-in-sig.invalid> |
|---|---|
| Date | 2016-05-22 10:05 +0000 |
| Message-ID | <nhs08u$47l$1@dont-email.me> |
| In reply to | #34363 |
On Sun, 22 May 2016 01:51:33 -0400, ruben safir wrote: > This passes for a demonstration and teaching example for a TreeMap > Since you're so smart, how us how you'd do it better. Post a properly commented, compilable example. BTW, the code you posted used to compile until you changed it and was a perfectly good demonstration of how to use an Iterator to walk a TreeMap and output its content as a list sorted in ascending key sequence. -- martin@ | Martin Gregorie gregorie. | Essex, UK org |
[toc] | [prev] | [next] | [standalone]
| From | Eric Sosman <esosman@comcast-dot-net.invalid> |
|---|---|
| Date | 2016-05-22 07:21 -0400 |
| Message-ID | <nhs4gm$lre$1@dont-email.me> |
| In reply to | #34363 |
On 5/22/2016 1:51 AM, ruben safir wrote:
> This passes for a demonstration and teaching example for a TreeMap
Until somebody added uncompilable junk to it, perhaps.
> import java.util.TreeMap;
> import java.util.Set;
> import java.util.Iterator;
> import java.util.Map;
>
> public class Details {
>
> public static void main(String args[]) {
>
> /* This is how to declare TreeMap */
> TreeMap<Integer, String> tmap =
> new TreeMap<Integer, String>(); <<studdering is always good
Not sure what you mean here.
> /*Adding elements to TreeMap*/
> tmap.put(1, "Data1");
> tmap.put(23, "Data2");
> tmap.put(70, "Data3");
> tmap.put(4, "Data4");
> tmap.put(2, "Data5");
>
> /* Display content using Iterator*/
> Set set = tmap.entrySet(); <<random obscure syntax... that is a
> constructor for another class?
It's a method call.
> Iterator iterator = set.iterator(); <<again, twice?
It's a method call.
> while(iterator.hasNext()) {
> Map.Entry mentry = (Map.Entry)iterator.next(); <<What the heck
> is this?
It's a method call, with a cast applied to the returned value.
> System.out.print("key is: "+ mentry.getKey() + " & Value is:
> "); <<How many levels of random systax does one need to just to do a loop?
It's a method call, not something random and certainly not "systax."
> System.out.println(mentry.getValue());
> }
>
> }
> }
--
esosman@comcast-dot-net.invalid
"Don't be afraid of work. Make work afraid of you." -- TLM
[toc] | [prev] | [next] | [standalone]
| From | Popping mad <rainbow@colition.gov> |
|---|---|
| Date | 2016-05-22 20:21 +0000 |
| Message-ID | <nht4d5$kuu$2@reader1.panix.com> |
| In reply to | #34365 |
On Sun, 22 May 2016 07:21:15 -0400, Eric Sosman wrote: > /* Display content using Iterator*/ >> Set set = tmap.entrySet(); <<random obscure syntax... that is a >> constructor for another class? > > It's a method call. evidently it is a constructor the question because why do I need two levels of class hierarchy manually called just to do a simple foreach.
[toc] | [prev] | [next] | [standalone]
| From | Lars Enderin <lars.enderin@telia.com> |
|---|---|
| Date | 2016-05-22 22:32 +0200 |
| Message-ID | <5742176A.7010104@telia.com> |
| In reply to | #34369 |
2016-05-22 22:21 skrev Popping mad: > On Sun, 22 May 2016 07:21:15 -0400, Eric Sosman wrote: > >> /* Display content using Iterator*/ >>> Set set = tmap.entrySet(); <<random obscure syntax... that is a >>> constructor for another class? >> >> It's a method call. > > evidently it is a constructor No! It's a method call returning a Set instance. > the question because why do I need two levels of class hierarchy manually > called just to do a simple foreach. > -- Lars Enderin
[toc] | [prev] | [next] | [standalone]
| From | Eric Sosman <esosman@comcast-dot-net.invalid> |
|---|---|
| Date | 2016-05-22 17:32 -0400 |
| Message-ID | <nht8b3$jr7$1@dont-email.me> |
| In reply to | #34369 |
On 5/22/2016 4:21 PM, Popping mad wrote:
> On Sun, 22 May 2016 07:21:15 -0400, Eric Sosman wrote:
>
>> /* Display content using Iterator*/
>>> Set set = tmap.entrySet(); <<random obscure syntax... that is a
>>> constructor for another class?
>>
>> It's a method call.
>
> evidently it is a constructor
Evidently it is nothing of the kind. Do you see the `new' keyword
anywhere in the vicinity? Hmmm? How does one invoke a constructor if
not by using `new'?
> the question because why do I need two levels of class hierarchy manually
> called just to do a simple foreach.
First, it's not a class hierarchy. The code you presented
uses five classes (Details, TreeMap, Integer, String, and System)
and three interfaces (Set, Iterator, and Map.Entry), and none of
these is a sub-class or sub-interface of any of the others.
Second, the point of the example seems to have been to show
what happens under the covers of a "simple foreach." You could,
in fact, write a "simple foreach" to traverse the TreeMap's keys,
or values, or entries.
Third, "the question" as you pose it has nothing to do with
syntax.
Fourth and finally, it ill befits someone who doesn't know
Java, someone who doesn't know it even at an elementary level,
to bitch and moan about his own lack of knowledge.
--
esosman@comcast-dot-net.invalid
"Don't be afraid of work. Make work afraid of you." -- TLM
[toc] | [prev] | [next] | [standalone]
| From | Lew <lewbloch@gmail.com> |
|---|---|
| Date | 2016-05-23 14:36 -0700 |
| Message-ID | <122ea33e-1e42-4dc0-8e37-b01b778ee306@googlegroups.com> |
| In reply to | #34369 |
On Sunday, May 22, 2016 at 1:22:07 PM UTC-7, Popping mad wrote: > On Sun, 22 May 2016 07:21:15 -0400, Eric Sosman wrote: > > > /* Display content using Iterator*/ > >> Set set = tmap.entrySet(); <<random obscure syntax... that is a > >> constructor for another class? > > > > It's a method call. > > evidently it is a constructor No, it is not a constructor. 'entrySet()' is a standard method of the 'java.util.Map' interface, with which *all* Java programmers should be familiar. I suggest the Tutorials for you as well, Popping mad. > the question because why do I need two levels of class hierarchy manually > called just to do a simple foreach. You have to obtain the collection through which you wish to iterate. -- Lew
[toc] | [prev] | [next] | [standalone]
| From | Lew <lewbloch@gmail.com> |
|---|---|
| Date | 2016-05-23 14:34 -0700 |
| Message-ID | <42e7f7d8-dfed-49c7-b51b-8abf96aa2b86@googlegroups.com> |
| In reply to | #34365 |
On Sunday, May 22, 2016 at 4:21:29 AM UTC-7, Eric Sosman wrote:
> On 5/22/2016 1:51 AM, ruben safir wrote:
> > This passes for a demonstration and teaching example for a TreeMap
>
> Until somebody added uncompilable junk to it, perhaps.
>
> > import java.util.TreeMap;
> > import java.util.Set;
> > import java.util.Iterator;
> > import java.util.Map;
> >
> > public class Details {
> >
> > public static void main(String args[]) {
> >
> > /* This is how to declare TreeMap */
> > TreeMap<Integer, String> tmap =
> > new TreeMap<Integer, String>(); <<studdering is always good
>
> Not sure what you mean here.
Hard to tell, since "studdering" is not a word in English.
>
> > /*Adding elements to TreeMap*/
> > tmap.put(1, "Data1");
> > tmap.put(23, "Data2");
> > tmap.put(70, "Data3");
> > tmap.put(4, "Data4");
> > tmap.put(2, "Data5");
> >
> > /* Display content using Iterator*/
> > Set set = tmap.entrySet(); <<random obscure syntax... that is a
> > constructor for another class?
>
> It's a method call.
It's a method call to a method that is well documented in the Javadocs and has been around since Java 1.2, introduced about seventeen and a half years ago. It's rather important for all Java programmers to be familiar with 'Map', 'List', 'Set', and the other interfaces in the collections framework. I commend the Oracle Java Tutorials to your attention, @ruben safir.
>
> > Iterator iterator = set.iterator(); <<again, twice?
Again, what twice?
Have you even read the Java Tutorials?
> It's a method call.
>
> > while(iterator.hasNext()) {
> > Map.Entry mentry = (Map.Entry)iterator.next(); <<What the heck
> > is this?
Pretty much bog-standard calls in Java, very common and universal.
Check out the Java Tutorials.
> It's a method call, with a cast applied to the returned value.
>
> > System.out.print("key is: "+ mentry.getKey() + " & Value is:
> > "); <<How many levels of random systax does one need to just to do a loop?
None.
> It's a method call, not something random and certainly not "systax."
>
> > System.out.println(mentry.getValue());
> > }
> >
> > }
> > }
ruben safir, your main difficulty is that you have neither taken any elementary Java training, nor studied any introductory Java tutorial material.
--
Lew
[toc] | [prev] | [next] | [standalone]
| From | Knute Johnson <nospam@rabbitbrush.frazmtn.com> |
|---|---|
| Date | 2016-05-22 08:41 -0700 |
| Message-ID | <nhsjoi$hd4$1@dont-email.me> |
| In reply to | #34363 |
On 5/21/2016 22:51, ruben safir wrote:
> This passes for a demonstration and teaching example for a TreeMap
>
>
> import java.util.TreeMap;
> import java.util.Set;
> import java.util.Iterator;
> import java.util.Map;
>
> public class Details {
>
> public static void main(String args[]) {
>
> /* This is how to declare TreeMap */
> TreeMap<Integer, String> tmap =
> new TreeMap<Integer, String>(); <<studdering is always good
>
> /*Adding elements to TreeMap*/
> tmap.put(1, "Data1");
> tmap.put(23, "Data2");
> tmap.put(70, "Data3");
> tmap.put(4, "Data4");
> tmap.put(2, "Data5");
>
> /* Display content using Iterator*/
> Set set = tmap.entrySet(); <<random obscure syntax... that is a
> constructor for another class?
> Iterator iterator = set.iterator(); <<again, twice?
> while(iterator.hasNext()) {
> Map.Entry mentry = (Map.Entry)iterator.next(); <<What the heck
> is this?
> System.out.print("key is: "+ mentry.getKey() + " & Value is:
> "); <<How many levels of random systax does one need to just to do a loop?
> System.out.println(mentry.getValue());
> }
>
> }
> }
>
It's not a modern example of how to iterate over a TreeMap but I suspect
that it was also to give an example of how to use Map.Entry. If you
just want to print out the entries of the map in order you would use
something similar to this now.
import java.util.*;
public class test {
public static void main(String... args) {
TreeMap<Integer,String> tmap = new TreeMap<>();
tmap.put(1,"Data1");
tmap.put(23,"Data2");
tmap.put(70,"Data3");
tmap.put(4,"Data4");
tmap.put(2,"Data5");
for (Integer key : tmap.keySet())
System.out.printf("key is: %d & value is: %s\n",
key,tmap.get(key));
}
}
C:\Users\Knute Johnson>java test
key is: 1 & value is: Data1
key is: 2 & value is: Data5
key is: 4 & value is: Data4
key is: 23 & value is: Data2
key is: 70 & value is: Data3
Keeping a SortedMap can be expensive and if you only occasionally need
it to be sorted you can sort the key set before you interrogate the Map.
import java.util.*;
public class test1 {
public static void main(String... args) {
Map<Integer,String> tmap = new HashMap<>();
tmap.put(1,"Data1");
tmap.put(23,"Data2");
tmap.put(70,"Data3");
tmap.put(4,"Data4");
tmap.put(2,"Data5");
for (Integer key : new TreeSet<Integer>(tmap.keySet()))
System.out.printf("key is: %d & value is: %s\n",
key,tmap.get(key));
}
}
C:\Users\Knute Johnson>java test1
key is: 1 & value is: Data1
key is: 2 & value is: Data5
key is: 4 & value is: Data4
key is: 23 & value is: Data2
key is: 70 & value is: Data3
--
Knute Johnson
[toc] | [prev] | [next] | [standalone]
| From | Robert Klemme <shortcutter@googlemail.com> |
|---|---|
| Date | 2016-05-22 22:22 +0200 |
| Message-ID | <dqeiopFiq3jU1@mid.individual.net> |
| In reply to | #34368 |
On 22.05.2016 17:41, Knute Johnson wrote:
> It's not a modern example of how to iterate over a TreeMap but I suspect
> that it was also to give an example of how to use Map.Entry. If you
> just want to print out the entries of the map in order you would use
> something similar to this now.
>
> import java.util.*;
>
> public class test {
> public static void main(String... args) {
> TreeMap<Integer,String> tmap = new TreeMap<>();
> tmap.put(1,"Data1");
> tmap.put(23,"Data2");
> tmap.put(70,"Data3");
> tmap.put(4,"Data4");
> tmap.put(2,"Data5");
>
> for (Integer key : tmap.keySet())
> System.out.printf("key is: %d & value is: %s\n",
> key,tmap.get(key));
> }
> }
And why not do this instead?
for (final Entry<Integer, String> entry : tmap.entrySet())
System.out.printf("key is: %d & value is: %s\n", entry.getKey(),
entry.getValue());
Note: tmap.get(key) is usually less efficient than fetching the value
from an Entry.
Kind regards
robert
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
[toc] | [prev] | [next] | [standalone]
| From | Knute Johnson <nospam@rabbitbrush.frazmtn.com> |
|---|---|
| Date | 2016-05-22 22:13 -0700 |
| Message-ID | <nhu3al$36t$1@dont-email.me> |
| In reply to | #34370 |
On 5/22/2016 13:22, Robert Klemme wrote:
> And why not do this instead?
>
> for (final Entry<Integer, String> entry : tmap.entrySet())
> System.out.printf("key is: %d & value is: %s\n", entry.getKey(),
> entry.getValue());
>
> Note: tmap.get(key) is usually less efficient than fetching the value
> from an Entry.
>
> Kind regards
>
> robert
I'll bite, why is it less efficient?
--
Knute Johnson
[toc] | [prev] | [next] | [standalone]
| From | Eric Sosman <esosman@comcast-dot-net.invalid> |
|---|---|
| Date | 2016-05-23 07:32 -0400 |
| Message-ID | <nhuphs$7op$1@dont-email.me> |
| In reply to | #34377 |
On 5/23/2016 1:13 AM, Knute Johnson wrote:
> On 5/22/2016 13:22, Robert Klemme wrote:
>> And why not do this instead?
>>
>> for (final Entry<Integer, String> entry : tmap.entrySet())
>> System.out.printf("key is: %d & value is: %s\n", entry.getKey(),
>> entry.getValue());
>>
>> Note: tmap.get(key) is usually less efficient than fetching the value
>> from an Entry.
>>
>> Kind regards
>>
>> robert
>
> I'll bite, why is it less efficient?
It doesn't need to re-search the map.
Admittedly, Map.Entry is an interface rather than a class, so
it's not a given that the getKey() and getValue() implementations
are one-liners. It seems highly likely, though -- and in the case
of TreeMap, both methods are in fact trivial.
--
esosman@comcast-dot-net.invalid
"Don't be afraid of work. Make work afraid of you." -- TLM
[toc] | [prev] | [next] | [standalone]
| From | Robert Klemme <shortcutter@googlemail.com> |
|---|---|
| Date | 2016-05-23 04:57 -0700 |
| Message-ID | <87fd2210-fe5f-40bc-9208-82b9f3d6232a@googlegroups.com> |
| In reply to | #34379 |
On Monday, May 23, 2016 at 1:32:49 PM UTC+2, Eric Sosman wrote:
> On 5/23/2016 1:13 AM, Knute Johnson wrote:
> > On 5/22/2016 13:22, Robert Klemme wrote:
> >> And why not do this instead?
> >>
> >> for (final Entry<Integer, String> entry : tmap.entrySet())
> >> System.out.printf("key is: %d & value is: %s\n", entry.getKey(),
> >> entry.getValue());
> >>
> >> Note: tmap.get(key) is usually less efficient than fetching the value
> >> from an Entry.
> > I'll bite, why is it less efficient?
>
> It doesn't need to re-search the map.
Exactly.
> Admittedly, Map.Entry is an interface rather than a class, so
> it's not a given that the getKey() and getValue() implementations
> are one-liners. It seems highly likely, though -- and in the case
> of TreeMap, both methods are in fact trivial.
That's why I put the "usually" in my sentence. :-)
Kind regards
robert
[toc] | [prev] | [next] | [standalone]
| From | Popping mad <rainbow@colition.gov> |
|---|---|
| Date | 2016-05-22 20:23 +0000 |
| Message-ID | <nht4g5$kuu$3@reader1.panix.com> |
| In reply to | #34363 |
On Sun, 22 May 2016 12:46:33 +0000, Stefan Ram wrote: > You always have this syntax: > > <expression> »;« > > . I.e., an expression <expression> followed by a semicolon »;«. > > Learn /only/ the expression statement and you understand 90 % > of each Java program, because the expression statement is what's use > most often in any Java program. Cool, eh? not exactly what I'm fishing for but one of the brightest things I've read in this news group. Thank You.
[toc] | [prev] | [next] | [standalone]
| From | Roedy Green <inquiry@mindprod.com> |
|---|---|
| Date | 2016-05-30 21:51 -0700 |
| Message-ID | <s16qkbh08u219kgo4ggkm7816glqe3l55t@4ax.com> |
| In reply to | #34363 |
On Sun, 22 May 2016 01:51:33 -0400, ruben safir <ruben@mrbrklyn.com> wrote: >This passes for a demonstration and teaching example for a TreeMap you could also read http://mindprod.com/jgloss/treemap.html
[toc] | [prev] | [next] | [standalone]
| From | Roedy Green <inquiry@mindprod.com> |
|---|---|
| Date | 2016-05-30 21:54 -0700 |
| Message-ID | <i36qkbp159l5v49g5som95prm3std0qtp3@4ax.com> |
| In reply to | #34363 |
On Sun, 22 May 2016 01:51:33 -0400, ruben safir <ruben@mrbrklyn.com>
wrote:
> TreeMap<Integer, String> tmap =
> new TreeMap<Integer, String>(); <<studdering is always good
the new syntax lets you shrink that a little:
TreeMap<Integer, String> tmap = new TreeMap<>();
Perhaps someday the first or second TreeMap can be elided as well.
Intellij inspector makes those changes for you.
[toc] | [prev] | [next] | [standalone]
| From | Roedy Green <inquiry@mindprod.com> |
|---|---|
| Date | 2016-05-30 22:00 -0700 |
| Message-ID | <g86qkbp6sdn8m435b76suvsnflmt8q9utl@4ax.com> |
| In reply to | #34363 |
On Sun, 22 May 2016 01:51:33 -0400, ruben safir <ruben@mrbrklyn.com> wrote: > Set set = tmap.entrySet(); <<random obscure syntax... that is a >constructor for another class? Why should that be obsure?| It is standard java. You have to look up the methods. Set set defines a new variable. You get the value by taking your TreeMap and running its entrySet() method. That get you a Set of pairs. I would have written that as: final Set<Map.Entry<String, String>> entries = tmap.entrySet(); To preserve the pair structure.
[toc] | [prev] | [next] | [standalone]
| From | Roedy Green <inquiry@mindprod.com> |
|---|---|
| Date | 2016-05-30 22:17 -0700 |
| Message-ID | <s87qkb5s9070g8irnip84c07ai5fc5rrjh@4ax.com> |
| In reply to | #34363 |
On Sun, 22 May 2016 01:51:33 -0400, ruben safir <ruben@mrbrklyn.com>
wrote:
> Set set = tmap.entrySet(); <<random obscure syntax... that is a
>constructor for another class?
You know there is no constructor involved because they is no "new"
keyword.
I often wish elements of Java had unique keywords so you could analyse
Java with periferal vision or a search/replace text processor.
I would have had a "method" keyword you could search for. I would
repeat the name of a method on its last line. These would be
inserted/maintained by the IDE.
Instead of using } to terminate everything, I would use some keywords
instead. Then when {} got unbalanced, the IDE could most of the time
suggest a fix.
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.java.programmer
csiph-web