Wednesday, 15 August 2018
Sunday, 29 July 2018
JAVA : Bitmasking
JAVA : Bitmasking
Assume we have many flags with each falg of VARCHAR2(1) in db..
Eg:
QURYABLE_FLAG= Y/N
UPDATABLE_FLAG = Y/N
MAPPABLE_FLAG = Y/N
...........
Instead of having separate column for each flag in DB, all these things we can store it in single column (ATTRIBUTE_FLAGS NUMBER)
Internally number represents in bits, and each bit represents one flag
Eg: ATTRIBUTE_FLAGS = 1 (0001) = QURYABLE_FLAG
ATTRIBUTE_FLAGS = 2 (0010) = UPDATABLE_FLAG
ATTRIBUTE_FLAGS = 4 (0100) = MAPPABLE_FLAG
..............
Like this NUMBER field we can take 32 bits, so we can use up to 31 flags (last bit is for +/-)
Eg: assume we want to set/reset QUERYABLE_FLAG -> which is st bit(0001) and number is (1))
setFlag() -> dbData | 1
resetFlag() -> dbData & ~ 1
checkFlag()
############################################################################
import java.text.*;
import java.util.*;
public class Test{
static int attriuteFlag_DbColumnData = 0; //0010 0001 0111
private static final Map<String, String> indexMap;
static
{
indexMap = new HashMap<String, String>();
indexMap.put("QUERIABLE_FLAG", "1");
indexMap.put("MANDATORY_FLAG", "2");
indexMap.put("UPDATABLE_FLAG", "4");
}
public static int resetFlag(String attributeFlag,int dbData){
return dbData & ~Integer.parseInt(indexMap.get(attributeFlag));
}
public static int setFlag(String attributeFlag,int dbData){
return dbData | Integer.parseInt(indexMap.get(attributeFlag));
}
public static boolean checkFlag(String attributeFlag,int dbData){
if ((dbData & Integer.parseInt(indexMap.get(attributeFlag))) == Integer.parseInt(indexMap.get(attributeFlag)))
{
return true;
}
else{
return false;
}
}
public static void main(String a[]){
System.out.println("resetFlag : QUERIABLE_FLAG : Before : "+attriuteFlag_DbColumnData);
System.out.println("resetFlag : QUERIABLE_FLAG : After : " + resetFlag("QUERIABLE_FLAG",attriuteFlag_DbColumnData));
System.out.println("################################################################");
System.out.println("setFlag : QUERIABLE_FLAG : Before : "+resetFlag("QUERIABLE_FLAG",attriuteFlag_DbColumnData));
System.out.println("setFlag : QUERIABLE_FLAG : After : " + setFlag("QUERIABLE_FLAG",resetFlag("QUERIABLE_FLAG",attriuteFlag_DbColumnData)));
System.out.println("========================================================================");
attriuteFlag_DbColumnData = 1;
System.out.println("resetFlag : MANDATORY_FLAG : Before : "+attriuteFlag_DbColumnData);
System.out.println("resetFlag : MANDATORY_FLAG : After : " + resetFlag("MANDATORY_FLAG",attriuteFlag_DbColumnData));
System.out.println("################################################################");
System.out.println("setFlag : MANDATORY_FLAG : Before : "+attriuteFlag_DbColumnData);
System.out.println("setFlag : MANDATORY_FLAG : After : " + setFlag("MANDATORY_FLAG",attriuteFlag_DbColumnData));
System.out.println("======================3333333==========================================");
attriuteFlag_DbColumnData = 3;
System.out.println("checkFlag : QUERIABLE_FLAG : For DBData("+attriuteFlag_DbColumnData+") => "+checkFlag("QUERIABLE_FLAG",attriuteFlag_DbColumnData));
System.out.println("checkFlag : MANDATORY_FLAG : For DBData("+attriuteFlag_DbColumnData+") => "+checkFlag("MANDATORY_FLAG",attriuteFlag_DbColumnData));
System.out.println("======================2222222==========================================");
attriuteFlag_DbColumnData = 2;
System.out.println("checkFlag : QUERIABLE_FLAG : For DBData("+attriuteFlag_DbColumnData+") => "+checkFlag("QUERIABLE_FLAG",attriuteFlag_DbColumnData));
System.out.println("checkFlag : MANDATORY_FLAG : For DBData("+attriuteFlag_DbColumnData+") => "+checkFlag("MANDATORY_FLAG",attriuteFlag_DbColumnData));
}
}
//##################Output ################################################################
// resetFlag : QUERIABLE_FLAG : Before : 0
// resetFlag : QUERIABLE_FLAG : After : 0
// ################################################################
// setFlag : QUERIABLE_FLAG : Before : 0
// setFlag : QUERIABLE_FLAG : After : 1
// ========================================================================
// resetFlag : MANDATORY_FLAG : Before : 1
// resetFlag : MANDATORY_FLAG : After : 1
// ################################################################
// setFlag : MANDATORY_FLAG : Before : 1
// setFlag : MANDATORY_FLAG : After : 3
// ======================3333333==========================================
// checkFlag : QUERIABLE_FLAG : For DBData(3) => true
// checkFlag : MANDATORY_FLAG : For DBData(3) => true
// ======================2222222==========================================
// checkFlag : QUERIABLE_FLAG : For DBData(2) => false
// checkFlag : MANDATORY_FLAG : For DBData(2) => true
###############################################################################
Friday, 27 July 2018
Thursday, 26 July 2018
Monday, 23 July 2018
JAVA : COLLECTION Tips
JAVA : COLLECTION Tips
Note : HashSet and TreeSet is used to resolve many scenarios (Remove duplicate, find duplicate, sort Array, find Min/Max number in array etc...)
1. Check Duplicate in collection.
2. Want to add objects in order
3. Want to find highest and lowest number in non-sorted array.
1> First add it to TreeSet
2> treeset.first() -> 1
treeset.last() -> 8
3. SORT HASHTABLE -> JUST CONVERT HASHTABLE TO TREEMAP (Automatically will be sorted)
public static void main (String[] args) {
Hashtable<String, String> ht= new Hashtable<String, String>();
ht.put("zac", "Chaitanya");
ht.put("abc", "Ajeet");
ht.put("yyt", "Test");
ht.put("ddc", "Demo");
ht.put("ssa", "Anuj");
Map<String, String> map = new TreeMap<String, String>(ht);
for(Map.Entry<String,String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + " => " + value);
}
OR
Map hm = new TreeMap(ht);
Set<String> keys = hm.keySet();
for(String key: keys){
System.out.println("Value of "+key+" is: "+hm.get(key));
}
}
Subscribe to:
Posts (Atom)