Thursday 15 February 2018

find and calculate address in an array for given index

I Was confused for how we get the address and address calculation done in an array when we get element from array for passing an index.

So, any data structure used to achieve this mechanism? is there any mapping in memory or hashing or indexing like used in DB? 

It is simple, just like mathematical formula.

Consider one dim array ARR of N integer(2 byte memory for each element) stored in memory.

Now, to find address of ARR[i]:

Adddress(ARR[i]) = Base Address + No. Of bytes for each element * (Find index - Lower bound of ARR)

Here, 

Base Address = starting address of an array in memory
No. Of bytes for each element  = for integer, it is 2 bytes
Find index = which element you are searching in an array
Lower bound of ARR = lower bound  index of array

For Ex. consider integer array int[] ARR = new int[4];


Address Value Element
100 11 1st
102 12 2nd
104 13 3rd
106 14 4th


As per above table, 

Addresss(ARR[2]) = 100 + 2* (2-0) = 100+4=104

Happy Learning!!!

Sunday 11 February 2018

4 things for to get max output from programming


4 things for to get max output from programming

1. Study and try to predict the behavior of the program
2. try to implement the behavior 
3. fix it if assuming it is broken
4. then and then look for expert solution


Saturday 3 February 2018

HashMap with Null Key and Null Value

HashMap does not call hashcode when null is passed as key and null Key is handled as special case.

Put Method

HashMap puts null key in bucket 0 and maps null as key to passed value. it does it by linked list data structure it uses internally.
Linked list data structure used by HashMap (a static class in HashMap.java)
static class Entry<K,V> implements Map.Entry<K,V> {
        final K key;
        V value;
        Entry<K,V> next;
        final int hash;
}
In Entry class the K is set to null and value mapped to value passed in put method.

Get Method

While in Hashmap get method the checks if key is passed as null. Search Value for null key in bucket 0.
Hence there can only be one null key in one hashmap object.


When you put NULL to HashMap there is special check if you are trying to put NULL as key (called putForNullKey()). It is special case and works not like you are trying to put some object which is not null, and as you may see it even doesn't go to hash calculation.


public V put(K key, V value) {
    if (table == EMPTY_TABLE) {
        inflateTable(threshold);
    }
    if (key == null)
        return putForNullKey(value);
    int hash = hash(key);
    int i = indexFor(hash, table.length);
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
        Object k;
        if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }

    modCount++;
    addEntry(hash, key, value, i);
    return null;
}

private V putForNullKey(V value) {
    for (Entry<K,V> e = table[0]; e != null; e = e.next) {
        if (e.key == null) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }
    modCount++;
    addEntry(0, null, value, 0);
    return null;
}

Extract error records while inserting into db table using JDBCIO apache beam in java

 I was inserting data into postgres db using apache beam pipeline. it works perfectly with JdbcIO write of apache beam library. But, now, i ...