Re: Java: Switch Or If Else

  • From: Andreas Stefik <stefika@xxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Thu, 24 Feb 2011 07:52:59 -0600

Yaa, all of these things, more or less, are implementations of hash
tables. They work in a funny way involving prime numbers, but the
basic idea is that they provide an average asymptotic complexity of of
big oh of 1 for getting and putting values in the structure. As such,
they're very handy for storing values like strings, as you don't have
to index by a number, but a value ("Hello, World").

Stefik

On Thu, Feb 24, 2011 at 6:33 AM, Homme, James <james.homme@xxxxxxxxxxxx> wrote:
> Hi,
> In Perl, you have something that one book calls an associative array. Other 
> books say it's a hash. It's an array where you can look up stuff by using a 
> string. In Python, there's a dictionary object. My memory tells me that .Net 
> has a dictionary object. It sounds like you are saying that there's something 
> that makes these things work. Is that it?
>
> Thanks.
>
> Jim
>
> -----Original Message-----
> From: programmingblind-bounce@xxxxxxxxxxxxx 
> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Sina Bahram
> Sent: Wednesday, February 23, 2011 5:13 PM
> To: programmingblind@xxxxxxxxxxxxx
> Subject: RE: Java: Switch Or If Else
>
> Backed by a HashTable, but yes.
>
> Take care,
> Sina
>
> -----Original Message-----
> From: programmingblind-bounce@xxxxxxxxxxxxx 
> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Andreas Stefik
> Sent: Wednesday, February 23, 2011 2:11 PM
> To: programmingblind@xxxxxxxxxxxxx
> Subject: Re: Java: Switch Or If Else
>
> Yes, it is. The primary difference with lookup is that there is
> usually one grand-poo-ba Hash in the sky that stores references to all
> classes (jumps) that can be loaded on the system. So, for example, if
> you are in the NetBeans Platform, and you want to see if Python is
> available in your build as a plugin, you could do something
> metaphorically like:
>
> PythonParser parser = Lookup.getDefault().lookup(PythonParser.class)
>
> And then the global hash in the sky gets referenced and you can jump
> to the appropriate code. So yaa, Lookup is implemented, basically,
> with a dictionary.
>
> Stefik
>
> On Wed, Feb 23, 2011 at 11:19 AM, Homme, James <james.homme@xxxxxxxxxxxx> 
> wrote:
>> Hi,
>> Is this like a dictionary in JavaScript or Python, or a hash in Perl?
>>
>> Thanks.
>>
>> Jim
>>
>> -----Original Message-----
>> From: programmingblind-bounce@xxxxxxxxxxxxx 
>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Andreas Stefik
>> Sent: Wednesday, February 23, 2011 11:06 AM
>> To: programmingblind@xxxxxxxxxxxxx
>> Subject: Re: Java: Switch Or If Else
>>
>> To echo Dave, a common example of this sort of thing in modern
>> programming is called the Lookup Pattern. Essentially, you have a hash
>> table that stores a delegate interface, like actions. You can then
>> query the hash (average case big Oh of 1 access), for a particular
>> implementation or under a certain condition (e.g., a key, a class
>> type). and it will return to you the appropriate place to "jump" if
>> you will.
>>
>> Almost all modern IDE's, and many kinds of dynamic plugin systems,
>> also work this way,
>>
>> Stefik
>>
>> On Wed, Feb 23, 2011 at 7:49 AM, qubit <lauraeaves@xxxxxxxxx> wrote:
>>> Well, since cases in C, C++ and java all require explicit break statements
>>> to prevent fall-through, and a pile of case labels can be attached to the
>>> same code, a switch is not a 1-1 mapping.
>>> In fact it can have some truely harry logic.
>>> But as for avoiding gotos by using function pointers, this wouldn't work
>>> well because of the case where the code for one case falls through to the
>>> next one.  If you invoke a function you wouldn't necessarily have that
>>> option.
>>>
>>> If I sound a bit groggy it's because I've been up all night trying to get a
>>> package to compile on windows7 64 bit.
>>> I need to go dump ice water over my head or something -- I want to finish,
>>> but I am winking dreams of code fragments tearing apart my system... Oops --
>>> that wasn't a dream??? *scream* *smile*
>>>
>>> Happy hacking.
>>> --le
>>>
>>>
>>> ----- Original Message -----
>>> From: "Dave" <davidct1209@xxxxxxxxx>
>>> To: <programmingblind@xxxxxxxxxxxxx>
>>> Sent: Wednesday, February 23, 2011 7:01 AM
>>> Subject: Re: Java: Switch Or If Else
>>>
>>>
>>> Or to avoid the use of goto's...use a hash between your key (string,
>>> int, etc) and a delegate interface (in java), or a func ptr in C/C++.
>>> Plenty of ways to do this.  This of course, means you have memory
>>> overhead to consider.  The solution I think Sina suggested is writing
>>> asm so that you use the input to switch(input) as a base + offset to
>>> the case label.  (i.e. $pc + "input" would be the location of the case
>>> label pertaining to "input").
>>>
>>> Of course, this is all predicated on the assumption that you're
>>> interested in a one to one mapping and not a mapping of ranges or some
>>> other more complex boolean condition which James didn't assume btw.
>>> (i.e. a >= 10 && a <= 20, foo->isNull() && baz->bar()); in which case,
>>> if/else is still a good branching technique.
>>>
>>> On 2/23/11, qubit <lauraeaves@xxxxxxxxx> wrote:
>>>> Actually yes -- instead of the old fashioned integer cases on the C switch
>>>> you can have a hash lookup on x that maps to a label to jump to.  Like in
>>>> pseudo-C++ you would say
>>>>
>>>> Map<String,Label> jumpTable;
>>>> ...
>>>> l = jumpTable[x];
>>>> if l is null, goto defaultLabel;
>>>> else goto l;
>>>>
>>>> Or, if Map<String,Label> is defined so new entries are initialized with
>>>> value = defaultLabel, then you wouldn't need the if statement at all.
>>>> Just say
>>>>
>>>> goto jumpTable[x];
>>>>
>>>> Then the lookup on x will either find a match and would therefore have a
>>>> label defined, or if x isn't in the table, the lookup operation would
>>>> create
>>>> a "null" entry with defaultLabel as its value.
>>>>
>>>> Hope this makes sense.  I have seen C++ programs that do a truely volumous
>>>> amount of work with just 1 or 2 lines of code using libraries that do most
>>>> the work in a (hopefully) efficient manner.
>>>>
>>>> Happy hacking.
>>>> --le
>>>>
>>>> ----- Original Message -----
>>>> From: "Homme, James" <james.homme@xxxxxxxxxxxx>
>>>> To: <programmingblind@xxxxxxxxxxxxx>
>>>> Sent: Wednesday, February 23, 2011 5:46 AM
>>>> Subject: RE: Java: Switch Or If Else
>>>>
>>>>
>>>> Hi,
>>>> Python has code that looks something like this.
>>>>
>>>> If x in MyList:
>>>>   do some stuff here.
>>>>
>>>> Is that the same thing?
>>>>
>>>> Thanks.
>>>>
>>>> Jim
>>>>
>>>> Jim Homme,
>>>> Usability Services,
>>>> Phone: 412-544-1810. Skype: jim.homme
>>>> Internal recipients,  Read my accessibility blog. Discuss accessibility
>>>> here. Accessibility Wiki: Breaking news and accessibility advice
>>>>
>>>>
>>>> -----Original Message-----
>>>> From: programmingblind-bounce@xxxxxxxxxxxxx
>>>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of qubit
>>>> Sent: Tuesday, February 22, 2011 10:02 PM
>>>> To: programmingblind@xxxxxxxxxxxxx
>>>> Subject: Re: Java: Switch Or If Else
>>>>
>>>> another thing about switch statements for simple conditions like int or
>>>> character literal values,  is that the compiler can do some tricky things
>>>> to
>>>> speed up the code -- for example, if you compare an int to values
>>>> 1,2,3,...,100, and they all have code to execute, the compiler can do
>>>> something like create a jump array and transform the switch to code like
>>>> the
>>>> following (pseudo code -- I don't know what java low level code looks
>>>> like):
>>>>
>>>> jumpArray[100] = { label1, label2, label3, ... label100 };
>>>> # the switch statement "switch (val) becomes:
>>>> if x is in range, then goto jumpArray[x-1]
>>>> else goto defaultLabel
>>>>
>>>> I remember seeing this kind of thing in the code I used to support.
>>>> Of course that was a c/c++ compiler, but with java there might be similar
>>>> optimizations.
>>>> --le
>>>>
>>>> ----- Original Message -----
>>>> From: "Dave" <davidct1209@xxxxxxxxx>
>>>> To: <programmingblind@xxxxxxxxxxxxx>
>>>> Sent: Tuesday, February 22, 2011 7:43 PM
>>>> Subject: Re: Java: Switch Or If Else
>>>>
>>>>
>>>> That's assuming you don't have complex conditions you're checking for;
>>>> sometimes, if/else if is the only way to go.  When code becomes
>>>> long/slightly unreadable, refactoring usually is a good idea.
>>>>
>>>> On 2/22/11, Homme, James <james.homme@xxxxxxxxxxxx> wrote:
>>>>> Hi,
>>>>> Thanks, guys. When I saw Ken's example, I liked the switch better.
>>>>>
>>>>> Jim
>>>>>
>>>>> Jim Homme,
>>>>> Usability Services,
>>>>> Phone: 412-544-1810. Skype: jim.homme
>>>>> Internal recipients,  Read my accessibility
>>>>> blog<http://mysites.highmark.com/personal/lidikki/Blog/default.aspx>.
>>>>> Discuss accessibility
>>>>> here<http://collaborate.highmark.com/COP/technical/accessibility/default.aspx>.
>>>>> Accessibility Wiki: Breaking news and accessibility
>>>>> advice<http://collaborate.highmark.com/COP/technical/accessibility/Accessibility%20Wiki/Forms/AllPages.aspx>
>>>>>
>>>>> From: programmingblind-bounce@xxxxxxxxxxxxx
>>>>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Sina Bahram
>>>>> Sent: Tuesday, February 22, 2011 1:02 PM
>>>>> To: programmingblind@xxxxxxxxxxxxx
>>>>> Subject: RE: Java: Switch Or If Else
>>>>>
>>>>> I can't agree more
>>>>>
>>>>> Switch is so superior to chains of if statements.
>>>>>
>>>>> Take care,
>>>>> Sina
>>>>>
>>>>> From: programmingblind-bounce@xxxxxxxxxxxxx
>>>>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Ken Perry
>>>>> Sent: Tuesday, February 22, 2011 12:59 PM
>>>>> To: programmingblind@xxxxxxxxxxxxx
>>>>> Subject: RE: Java: Switch Or If Else
>>>>>
>>>>>
>>>>>
>>>>> I find switch much easier to use and read in large if else messes.  For
>>>>> example in a multi level if else like this.
>>>>>
>>>>> If (){
>>>>> If (){
>>>>> If (){
>>>>> }else{
>>>>> }
>>>>> }else{
>>>>> }
>>>>> }else{
>>>>> If (){
>>>>> If (){
>>>>> }else{
>>>>> }
>>>>> }else{
>>>>> }
>>>>> }
>>>>>
>>>>>
>>>>> Could look like this
>>>>>
>>>>> Switch ()
>>>>> Case 1:
>>>>> If (){
>>>>> }else{
>>>>> }
>>>>> Case 2:
>>>>> If (){
>>>>> }Else{
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>> From: programmingblind-bounce@xxxxxxxxxxxxx
>>>>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Homme, James
>>>>> Sent: Tuesday, February 22, 2011 12:41 PM
>>>>> To: programmingblind@xxxxxxxxxxxxx
>>>>> Subject: Java: Switch Or If Else
>>>>>
>>>>> Hi,
>>>>> Would there be a time when you would choose to use switch, and another
>>>>> when
>>>>> you would choose to use if else? For example, if doing it one way or the
>>>>> other would make a program easier to read. When I was just thinking about
>>>>> this, it seemed to me that if you would choose if else, you wouldn't have
>>>>> to
>>>>> keep remembering to put in break statements. For ease of reading, it
>>>>> would
>>>>> seem that the code would take less time to listen to if you would choose
>>>>> if
>>>>> else.
>>>>>
>>>>> Thanks.
>>>>>
>>>>> Jim
>>>>> Jim Homme,
>>>>> Usability Services,
>>>>> Phone: 412-544-1810. Skype: jim.homme
>>>>> Internal recipients,  Read my accessibility
>>>>> blog<http://mysites.highmark.com/personal/lidikki/Blog/default.aspx>.
>>>>> Discuss accessibility
>>>>> here<http://collaborate.highmark.com/COP/technical/accessibility/default.aspx>.
>>>>> Accessibility Wiki: Breaking news and accessibility
>>>>> advice<http://collaborate.highmark.com/COP/technical/accessibility/Accessibility%20Wiki/Forms/AllPages.aspx>
>>>>>
>>>>>
>>>>> ________________________________
>>>>> This e-mail and any attachments to it are confidential and are intended
>>>>> solely for use of the individual or entity to whom they are addressed. If
>>>>> you have received this e-mail in error, please notify the sender
>>>>> immediately
>>>>> and then delete it. If you are not the intended recipient, you must not
>>>>> keep, use, disclose, copy or distribute this e-mail without the author's
>>>>> prior permission. The views expressed in this e-mail message do not
>>>>> necessarily represent the views of Highmark Inc., its subsidiaries, or
>>>>> affiliates.
>>>>>
>>>> __________
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/programmingblind
>>>>
>>>> __________
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/programmingblind
>>>>
>>>> __________
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/programmingblind
>>>>
>>>> __________
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/programmingblind
>>>>
>>>>
>>> __________
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/programmingblind
>>>
>>> __________
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/programmingblind
>>>
>>>
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
>>
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
>>
>>
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
>
__________
View the list's information and change your settings at
//www.freelists.org/list/programmingblind

Other related posts: