Confusion about reference variable

Still, I am sometimes an incurable complete newbie. The code A works but I feel repeating same comparisons is somehow awkward. But, much simpler code B fails in inserting a new node in a tree. Could you explain what is happening here in Java backstage?
//[code A]
// code that works
while (p != null) {
  prev = p;
  if (p.compareTo(newnode) < 0){
    p = p.right;
  else{
    p = p.left;
if (prev.compareTo(newnode) < 0){
  prev.right = newnode;
else{
  prev.left = newnode;
//[code B]
// code that fails
while (p != null) {
  if (p.compareTo(newnode) < 0){
    p = p.right;
  else{
    p = p.left;
p = newnode; // p is original p, p.right or p.left
             // == prev, prev.right or prev.left on above code

Case A:
you hold the reference of the last node in "prev". so after completing the traversal ur "p" becomes null and "prev" hold the exact leaf position to add the new node.
for which u used prev.right or prev.left to store the reference of the new node.
Case B:
U traverse correctly but do not hold the reference of the leaf , which will store the new node.
In this case u will never be able to add a new node. as u had lost the reference which will store the new node.
I think u are confused,bcoz u think that in case of b , "p" is the right position to store the new node and assighing new node to p will work.
but think when u set new node reference to p that reference is not hold by any of the tree node (as reference are stored in <leaf>.right or <leaf>.left).
I think this will make u understand the holding of reference in the tree.

Similar Messages

  • Any good article about reference variables casting ...

    Hi,
    I am looking for a good and simple article on the reference variables downcasting (and yes I am searching the Internet too so please do not suggest that).
    Please let me know if you know of any good article or if you can explain it well as I am having hard time to figure out when it is right and when it is used incorrectly.
    Thanks,
    Pritchard

    Casting conversions are "right" when you need a reference of the particular type AND the underlying object is type-compatible with the declared variable.
    "Downcasting" example:
    Object o = new Object();
    String s = (String) o; // BAD! The underlying object is not an instance of String
    Object o = "foo";
    String s = (String) o; // Okay.~

  • Difference between reference variable and object ?

    I am getting confused with reference variable and object ?
    1. int a; // is a variable
    2. Car c = new Car(); // is a object of car type
    Suggest me what are the difference between the two.....

    jverd wrote:
    Shelby wrote:
    Something about an interned string literal?_
    I remember something from class about the way Java treats strings that contain the same data. yawmark
    posted a link for me that cleared up my confusion. thanks yawmark.
    >>
    Can you actually point back to the original reference?Not clear what you're asking here. Nothing points to references. References point to objects.
    Goodness, correct wording is as important as getting the syntax right, isn't it? ;-} What I was trying to ask is if it is possible to point back to the same String once you change the pointer on the variable?
    And you answered my question succintly with the rest of your post. thanks jverd
    >
    String str = "abc";
    str = null;'At this point, we've lost the reference to the original String object. However, at runtime, the VM will still be maintaining it in the constant pool. For any non-constant-pooled object, as we're writing our code, we'd have no way to refer to that object again. In this case, we are able to refer to the same object later in our code by simply using the same string literal. "abc" elsewhere in our code will cause the VM to give us a reference to that same pooled String. Same goes for Integer, etc. in the range -128..127.
    However, it's not good design to rely on this. If your design requires you to later point to "the same object" (as opposed to any object of a compatible type and holding the same contents), then you should explicitly maintain a reference to it. In the case of Strings, you really shouldn't care whether it's the same object or not. All you care about is the character sequence that defines the String's state.

  • Confused about passing by reference and passing by valule

    Hi,
    I am confuse about passing by reference and passing by value. I though objects are always passed by reference. But I find out that its true for java.sql.PreparedStatement but not for java.lang.String. How come when both are objects?
    Thanks

    Hi,
    I am confuse about passing by reference and passing
    by value. I though objects are always passed by
    reference. But I find out that its true for
    java.sql.PreparedStatement but not for
    java.lang.String. How come when both are objects?
    ThanksPass by value implies that the actual parameter is copied and that copy is used as the formal parameter (that is, the method is operating on a copy of what was passed in)
    Pass by reference means that the actual parameter is the formal parameter (that is, the method is operating on the thing which is passed in).
    In Java, you never, ever deal with objects - only references to objects. And Java always, always makes a copy of the actual parameter and uses that as the formal parameter, so Java is always, always pass by value using the standard definition of the term. However, since manipulating an object's state via any reference that refers to that object produces the same effect, changes to the object's state via the copied reference are visible to the calling code, which is what leads some folk to think of java as passing objects by reference, even though a) java doesn't pass objects at all and b) java doesn't do pass by reference. It passes object references by value.
    I've no idea what you're talking about wrt PreparedStatement, but String is immutable, so you can't change its state at all, so maybe that's what's tripping you up?
    Good Luck
    Lee
    PS: I will venture a guess that this is the 3rd reply. Let's see...
    Ok, second. Close enough.
    Yeah, good on yer mlk, At least I beat Jos.
    Message was edited by:
    tsith

  • I am confused about Icloud. I have a 5 year old Macbook, a 2 year old macbook and a 5 year old mac mini. What exactly do I need to do to get all this connected via Icloud. I also have an Iphone 3G. Help please!

    I am confused about Icloud. I have a 5 year old Macbook, a 2 year old macbook and a 5 year old mac mini. What exactly do I need to do to get all this connected via Icloud. I also have an Iphone 3G. Help please! Also, I still don't understand exactly what the benefits are. At the moment it seems a lot of hassle to change a system that's been working perfectly well and that I'm very happy with. I'm not at all sure whether the mac mini (1.66 GHz INtel Core Duo) can be brought up to the relevant spec to run ICloud.  Any thoughts?

    There are two aspects to iCloud.  One is simply getting an account, or migrating a mobileme account to iCloud.  The second part is using the various features of iCloud to sync contacts, calendars, use music match or photo sharing, and store iWorks documents.
    First to get an iCloud account:
    If you have a mobileme account, you can migrate by simply logging onto www.icloud.com (ignore any references to Lion and just click through to complete the migration).  If you have OS X Lion or an iOS 5 mobile device, you can create an iCloud account on that device using any valid AppleID.
    Once you have an account, you can use JUST the mail account if you wishi - it is a standard IMAP account so you would set it up like any other IMAP email account you have, in whatever client program you use to read email.
    To use the OTHER feautes of iCloud, your computers will have to be running OS X Lion (10.7).  Your iPhone 3G will never be able to use iCloud as it cannot run iOS 5 (you need a min. of an iPhone 3GS to run iOS 5).
    The requirements for OS X Lion are here - http://www.apple.com/macosx/specs.html  You need a min. of a Core 2 duo processor so you mini is not capable of running Lion.
    So, in your case, the single reasons for iCloud would be if you have a mobileme account, then use the online www.icloud.com to migrate your account so you do not lose your @me.com email address.  You can use iCloud email (without using any other iCloud features) by setting it up as IMAP mail with these settings - http://support.apple.com/kb/HT4864
    If you want an iCloud account and do NOT already have a mobileme account, you will need to upgrade one machine at least to Lion in order to be able to create an iCloud account.

  • Confusion about Kodo and JCA

    Hi,
    I'm a bit confused about Kodo's Connection Architecture strategy. It is my understanding that
    PMF's can be built to use the connection architecture. Along this line, one would configure the
    ConnectionFactory or ConnectionFactoryName, and possibly the ConnectionFactory2 and
    ConnectionFactory2Name properties in a PMF. The result of the PMF implementation supporting the
    connection architecture is nice integration with the application servers in terms of security,
    transaction, and connection management. One can lookup in JNDI a reference to a Kodo PMF that
    supports datastore transactions or to another one that supports optimistic transactions or to
    another one that supports NTR, and with proper settings of the transactional properties and suitable
    application code, one's sesson bean will work.
    But from what I can see of Kodo's JDOPersistenceManagerFactory class, it, itself, implements the
    ManagedConnectionFactory interface, meaning, I think, that this class is resource adaptor. And that
    the part that confuses me. Why would Kodo be a resource adaptor? I thought it used a resource
    adaptor, which I think is the same thing as a connection factory.
    Anyway, I'm puzzled, and I'm hoping that someone could straighten me out.
    David Ezzio

    David-
    The fact that Kodo can integrate into an application server as a
    Resource Adaptor, and section 3.2.2 of the specification that says that
    the PersistentManagerFactory should be able to utilize a Resource
    Adaptor to obtain connections to the data store are two separate issues.
    We implement Kodo itself as a Resource Adaptor in order to provide ease
    of integration into recent application servers. Your confusion is
    understandable, since we do not actually yet support the use of Resource
    Adaptors as the Connection Factories as per section 3.2.2.
    Does that make sense?
    David Ezzio <[email protected]> wrote:
    Hi,
    I'm a bit confused about Kodo's Connection Architecture strategy. It is my understanding that
    PMF's can be built to use the connection architecture. Along this line, one would configure the
    ConnectionFactory or ConnectionFactoryName, and possibly the ConnectionFactory2 and
    ConnectionFactory2Name properties in a PMF. The result of the PMF implementation supporting the
    connection architecture is nice integration with the application servers in terms of security,
    transaction, and connection management. One can lookup in JNDI a reference to a Kodo PMF that
    supports datastore transactions or to another one that supports optimistic transactions or to
    another one that supports NTR, and with proper settings of the transactional properties and suitable
    application code, one's sesson bean will work.
    But from what I can see of Kodo's JDOPersistenceManagerFactory class, it, itself, implements the
    ManagedConnectionFactory interface, meaning, I think, that this class is resource adaptor. And that
    the part that confuses me. Why would Kodo be a resource adaptor? I thought it used a resource
    adaptor, which I think is the same thing as a connection factory.
    Anyway, I'm puzzled, and I'm hoping that someone could straighten me out.
    David Ezzio--
    Marc Prud'hommeaux [email protected]
    SolarMetric Inc. http://www.solarmetric.com
    Kodo Java Data Objects Full featured JDO: eliminate the SQL from your code

  • Why Java provides Object cloning even if there is Object reference variable

    In both cases original value get changed. What is the difference between these (clonable interface & Object reference variable)

    Cloneable is a way to make a copy of an object, so that you now have two objects, usually with the same state. Assigning the value in one reference variable to another variable (I can only assume that's what you're talking about, as your question is not clear at all) does not create another object.

  • Confused about capability of extensions

    Hi,
    I'm a bit confused about what extensions are used for. I've
    never used any, and can't seem to figure out what they're for
    besides copy-paste.
    I looked at dreamweavers help file about creating extensions,
    but all it does is allow you to make a code block that can be
    inserted at a click of a button.
    Is there a way that you can make extensions that actually ADD
    options to dreamweaver menus? Like when a user right clicks
    somewhere, or something like that? Like if the user clicks anywhere
    a link to go to google.com is on the menu or something, thats
    simple.
    What I want is to build a window that is an extension. You
    can find what I am attempting to accomplish at:
    Here
    What can you do with extensions? Can you actually add onto
    dreamweavers product?

    "digitalpacman" <[email protected]> wrote in
    message
    news:e5nd8j$3ps$[email protected]..
    >I tried reading all that but none of it really helped.
    And the instructions
    >I
    > got don't even work. I tried to simply edit the menu
    options for the
    > reference
    > panel in the menus.xml file and nothing even changed. I
    added, deleted,
    > modified. Nothing changed. Yes I did restart dreamweaver
    and it was not
    > open
    > during the edit of the XML file.
    Dreamweaver creates a local copy of menus.xml that overrides
    the copy in
    Configuration. See this link for info:
    http://livedocs.macromedia.com/dreamweaver/8/extending/wwhelp/wwhimpl/common/html/wwhelp.h tm?context=LiveDocs_Parts&file=02_cust8.htm
    > Is it possible to add in your own WINDOWS? Like the
    Files window ect?
    Yes, look up Floating Panels in the Extending Dreamweaver
    manual.
    > I cant seem to find a reference to functions dreamweaver
    allows us to use
    > for
    > functionality.
    Check the DW API reference in the help menu. Almost every API
    call is in
    there. Additional functionality is in Configuration/Shared.
    Check the
    dwscripts.js file and others for a good idea of what can be
    done.
    Tom

  • Should i set null those reference variable object created inside of funtion

    hi,
    I create object inside of a member function . after finish execute that method those variable should set null to be garbage collection or no need ?
       public void sampleFun(){
           Object obj = new Object();
            // some work
         obj = null ;  //// ----------- > this need or not ?
    }after finished that method execution should i set
       obj = null;explicitly or no need ?? plz

    No, there's no need.
    When the reference variable passes out of scope, it ceases to exist, so it doesn't reference the object any more. As soon as an object has no references pointing to it, it is available for garbage collection.
    Your rule of thumb should be: don't do anything about garbage collection unless you know why you're doing it. And even then don't do it unless you can prove you need to.
    Dave.

  • I am confused about something.  How do I read a book on my MacBook Pro?  I can't find the iBook app anywhere, which is what I use on my iPad.  The book I want to read is in my iTunes but I can't click on it.  My iBook library does not show up in iTunes.

    I am confused about something.  How do I read a book on my MacBook Pro?  I can't find the iBook app anywhere, which is what I use on my iPad.  The book I want to read is in my iTunes but I can't click on it.  Some of my iBooks show up in my iTunes but they are "grayed" out.  The only books that respond in iTunes are audiobooks and that's not what I'm looking for.  Is this a stupid question?

    Nevermind - I answered my own question, which is I CAN"T READ ANY BOOKS I purchased in iBooks on my MacBook Pro.  If I want to read on my mac I have to use Kindle or Nook.  Which means any book I've already purchased through iBooks has to be read on my iPad.  Kind of a drag because there are times when it's more convenient for me to read while I'm sitting with my Mac.

  • Confuse about the injecting entity in EJB 3.0?

    Hi all,
    I have an customersBean which is inherit from customersRemote and my problem is i' am little confuse about injecting the entity(customer).
    Where can you apply the EntityManagerFactory is it outside on EJB or Inside the EJB? means outside EJB is use the web application or java application. i have and example.
    this is inside on EJB...............
    public class CustomersBean implements com.savingsaccount.session.CustomersRemote {
    @PersistenceContext(unitName="SavingAccounts")
    EntityManagerFactory emf;
    EntityManager em;
    /** Creates a new instance of CustomersBean */
    public CustomersBean() {
    public void create(int id, String name, String address, String telno, String mobileno)
    try{
    //This is the entity.
    Customer _customer = new Customer();
    _customer.setId(id);
    _customer.setName(name.toString());
    _customer.setAddress(address.toString());
    _customer.setTelno(telno.toString());
    _customer.setMobileno(mobileno.toString());
    em = emf.createEntityManager();
    em.persist(_customer);
    emf.close();
    }catch(Exception ex){
    throw new EJBException(ex.toString());
    in web application, i'm using the @EJB in customer servlets.
    public class CustomerProcessServlet extends HttpServlet {
    @EJB
    private CustomersRemote customerBean;
    blah blah inject directly coming request field from jsp.
    }

    Hi all,
    I have an customersBean which is inherit from customersRemote and my problem is i' am little confuse about injecting the entity(customer).
    Where can you apply the EntityManagerFactory is it outside on EJB or Inside the EJB? means outside EJB is use the web application or java application. i have and example.
    this is inside on EJB...............
    public class CustomersBean implements com.savingsaccount.session.CustomersRemote {
    @PersistenceContext(unitName="SavingAccounts")
    EntityManagerFactory emf;
    EntityManager em;
    /** Creates a new instance of CustomersBean */
    public CustomersBean() {
    public void create(int id, String name, String address, String telno, String mobileno)
    try{
    //This is the entity.
    Customer _customer = new Customer();
    _customer.setId(id);
    _customer.setName(name.toString());
    _customer.setAddress(address.toString());
    _customer.setTelno(telno.toString());
    _customer.setMobileno(mobileno.toString());
    em = emf.createEntityManager();
    em.persist(_customer);
    emf.close();
    }catch(Exception ex){
    throw new EJBException(ex.toString());
    in web application, i'm using the @EJB in customer servlets.
    public class CustomerProcessServlet extends HttpServlet {
    @EJB
    private CustomersRemote customerBean;
    blah blah inject directly coming request field from jsp.
    }

  • Confused about logical table source

    Hi,
    I'm confused about logical table source(LTS), there are 'General', 'Column Mapping', 'Content' tabs in
    LTS, in General tab ,there are some information,like 'Map to there tables' and 'joins',
    just here, we have created relationships in physical layer and BMM layer, so I would like to ask what's the use of the 'joins' here?

    Hi Alpha,
    Valid query, when you establish a complex join it is always between a logical fact and dimension table.Consider a scenario,
    Example:w_person_dx is an extension table not directly joined to a fact but joins to a dimension w_person_d.
    When you model the person_d tables in BMM, you ll have a single logical table with w_person_d as source.If you have to pull columns from both w_person_d and w_person_dx tables in a report, you add dx table as inner join to persond table in the general tab.Now when you check your physical query, you can see the inner join fired between the two dimensions.
    Rgds,
    Dpka

  • Not able to Pass Reference Variables to Deferred task

    Hi All,
    I am not able to Pass the reference variables to Deferred task, With the following code, I am getting null values (for the passed refs) in Deferred Task.
    Code is as:
    <Action id='1' name='Set Deferred Task Action' application='com.waveset.session.WorkflowServices'>
    <Argument name='op' value='addDeferredTask'/>
    <Argument name='type' value='User'/>
    <Argument name='name' value='$(empId)'/>
    <Argument name='authorized' value='true'/>
    <Argument name='task' value='WF_User Deferred Task'/> // Task defination
    <Argument name='date'>
    <Date>2008-11-19T14:50:18.840Z</Date>
    </Argument>
    <Argument name='taskDefinition'>
    <block trace='true'>
    <defvar name='usrObject'> // This is the variable I am passing to 'WF_User Deferred Task'
    <new class='com.waveset.object.GenericObject'/>
    </defvar>
    <invoke name='setAttributes'>
    <ref>usrObject</ref>
    <map>
    <s>accId</s>
    <ref>empId</ref>
    <s>updStatus</s>
    <ref>newStatus</ref>
    </map>
    </invoke>
    </block>
    </Argument>
    </Action>
    <Transition to='End'/>
    Please suggest me.
    Thanks,
    Ravi.

    yeah, you don't have your usrObject available in the deffered task however all variables that you put inside the usrObject are avialble. Like <ref>accId<ref> and <ref>updStatus</ref>. If you still need them organized hierarchically, you might try to add one more level to the object before passing it to addDefferedTask
                <block>
                  <defvar name='objWrapper'>
                    <new class='com.waveset.object.GenericObject'/>
                  </defvar>
                  <defvar name='usrObject'>
                    <new class='com.waveset.object.GenericObject'/>
                  </defvar>
                  <invoke name='setAttributes'>
                    <ref>usrObject</ref>
                    <map>
                      <s>accId</s>
                      <s>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy</s>
                      <s>updStatus</s>
                      <s>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</s>
                    </map>
                  </invoke>
                  <invoke name='setAttributes'>
                    <ref>objWrapper</ref>
                    <map>
                      <s>usrObject</s>
                      <ref>usrObject</ref>
                    </map>
                  </invoke>
                  <ref>objWrapper</ref>
                </block>I hope you ve got the idea. Cheerz.

  • Confused about transaction, checkpoint, normal recovery.

    After reading the documentation pdf, I start getting confused about it's description.
    Rephrased from the paragraph on the transaction pdf:
    "When database records are created, modified, or deleted, the modifications are represented in the BTree's leaf nodes. Beyond leaf node changes, database record modifications can also cause changes to other BTree nodes and structures"
    "if your writes are transaction-protected, then every time a transaction is committed the leaf nodes(and only leaf nodes) modified by that transaction are written to JE logfiles on disk."
    "Normal recovery, then is the process of recreating the entire BTree from the information available in the leaf nodes."
    According to the above description, I have following concerns:
    1. if I open a new environment and db, insert/modify/delete several million records, and without reopen the environment, then normal recovery is not run. That means, so far, the BTree is not complete? Will that affact the query efficiency? Or even worse, will that output incorrect results?
    2. if my above thinking is correct, then every time I finish commiting transactions, I need to let the checkpoint to run in order to recreate the whole BTree. If my above thinking is not correct, then, that means that, I don't need to care about anything, just call transaction.commit(), or db.sync(), and let je to care about all the details.(I hope this is true :>)
    michael.

    http://www.oracle.com/technology/documentation/berkeley-db/je/TransactionGettingStarted/chkpoint.html
    Checkpoints are normally performed by the checkpointer background thread, which is always running. Like all background threads, it is managed using the je.properties file. Currently, the only checkpointer property that you may want to manage is je.checkpointer.bytesInterval. This property identifies how much JE's log files can grow before a checkpoint is run. Its value is specified in bytes. Decreasing this value causes the checkpointer thread to run checkpoints more frequently. This will improve the time that it takes to run recovery, but it also increases the system resources (notably, I/O) required by JE.
    """

  • Confused about extending the Sprite class

    Howdy --
    I'm learning object oriented programming with ActionScript and am confused about the Sprite class and OO in general.
    My understanding is that the Sprite class allows you to group a set of objects together so that you can manipulate all of the objects simultaneously.
    I've been exploring the Open Flash Chart code and notice that the main class extends the Sprite class:
    public class Base extends Sprite {
    What does this enable you to do?
    Also, on a related note, how do I draw, say, a line once I've extended it?
    Without extending Sprite I could write:
    var graphContainer:Sprite = new Sprite();
    var newLine:Graphics = graphContainer.graphics;
    And it would work fine. Once I extend the Sprite class, I'm lost. How do I modify that code so that it still draws a line? I tried:
    var newLine:Graphics = this.graphics;
    My understanding is that since I'm extending the Sprite class, I should still be able to call its graphics method (or property? I have no idea). But, it yells at me, saying "1046: Type was not found or was not a compile-time constant: Graphics.

    Thanks -- that helped get rid of the error, I really appreciate it.
    Alas, I am still confused about the extended Sprite class.
    Here's my code so far. I want to draw an x-axis:
    package charts {
        import flash.display.Sprite;
        import flash.display.Graphics;
        public class Chart extends Sprite {
            // Attributes
            public var chartName:String;
            // Constructor
            public function Chart(width:Number, height:Number) {
                this.width = width;
                this.height = height;
            // Methods
            public function render() {
                drawAxis();
            public function drawAxis() {
                var newLine:Graphics = this.graphics;
                newLine.lineStyle(1, 0x000000);
                newLine.moveTo(0, 100);
                newLine.lineTo(100, 100);
    I instantiate Chart by saying var myChart:Chart = new Chart(); then I say myChart.render(); hoping that it will draw the axis, but nothing happens.
    I know I need the addChild method somewhere in here but I can't figure out where or what the parameter is, which goes back to my confusion regarding the extended Sprite class.
    I'll get this eventually =)

Maybe you are looking for

  • Cannot open iPhoto after creating 2 libraries, one in iCloud drive

    I am running into errors and cannot open iPhoto anymore.  The first message is "The iPhoto Library is locked, on a locked disk, or you do not have permission to make changes to it. iPhoto can try to repair the permissions." I choose repair, and then

  • IPhoto Picture Book larger than 28 x22cm - how do I specify?

    A few years ago, I made an iPhoto book using the Picture Book theme that was larger than 28x22cm. Now, when I try to order a book, I am only able to choose within the Picture Book theme from the hard, soft and wire bound options, and I don't have any

  • Creating a new "root level" folder in Infoview

    In Infoview (XI 3.1 SP6), does anyone know if it is possible (and how) to create a new "root level" folder, to add to the existing ones that are already there? At the root level, is "My favorites", "Inbox" and "Public Documents".  I've been asked to

  • Cannot input in Labview

    until yesterday the program was fine, but nothing changed and I can not interact with Labview (version 8). Ctrl-E would not switch to diagram, string ctrl or number ctrl would not take anything. I move my mouse onto the ctrl and click, the screen jus

  • Just installed 10.4. and lost 'process viewer' -

    what, where, how do I use to see system processes? thanks