用二进制的与、或、非运算方便的解决实际问题
二进制的与、或、非运算特殊用法的不同运用场合:
1.权限控制
下面我用几个数字来代表增,删,改,查。(注:1带有有权限,有几个1,就代表有几个权限,1的位置不同,所带表的权限也不同)
/** * 通过3次循环,对field 进行快速分类,找出彼此code不同的TableField * @author qihuan * */public class QuickDiff { private List<TableField> oldFieldPop = new ArrayList<TableField>(); private List<TableField> newFieldAppend = new ArrayList<TableField>(); private List<String> commonCode = new ArrayList<String>(); private Map<String, TableField> newFieldMap; private Map<String, TableField> oldFieldMap; public QuickDiff(){ } /** * 通过3次循环,对field 进行快速分类 * @param oldFields * @param newFields */ public void doDiff(List<TableField> oldFields,List<TableField> newFields){// key:desc -- value:对应出现次数Map<String,Integer> countMap = new HashMap<String, Integer>();addToMap(countMap,oldFields,1);//old 权为 1addToMap(countMap,newFields,10);//new 权为10newFieldMap = turnToMapByCode(newFields);oldFieldMap = turnToMapByCode(oldFields);//对 独有的code进行分类for(String code : countMap.keySet()){ int value = countMap.get(code); if(value == 11){commonCode.add(code);//do nothing }else if(value == 10){newFieldAppend.add(newFieldMap.get(code)); }else if(value == 1){oldFieldPop.add(oldFieldMap.get(code)); }} } /** * 按照 code 进行分类 * @param fields * @return */ private Map<String, TableField> turnToMapByCode(List<TableField> fields){Map<String, TableField> fieldMap = new HashMap<String, TableField>();for(TableField tf : fields){ String code = tf.getCode(); fieldMap.put(code, tf);}return fieldMap; } /** * * @param countMap 计数map * @param fields * @param value 权 */ private void addToMap(Map<String, Integer> countMap, List<TableField> fields, int value) {for(TableField tf : fields){ String code = tf.getCode(); if(null == countMap.get(code)){countMap.put(code, 0); } int count = countMap.get(code);//获取当前权 countMap.put(code, count + value);//更新权} } /** * old 独有的 * @return */ public List<TableField> getOldFieldPop() { return oldFieldPop; } /** * new 独有的 * @return */ public List<TableField> getNewFieldAppend() { return newFieldAppend; } /** * 共有的 * @return */ public List<String> getCommonCode() { return commonCode; } /** * newField to Map * @return */ public Map<String, TableField> getNewFieldMap() { return newFieldMap; } /** * oldField to Map * @return */ public Map<String, TableField> getOldFieldMap() { return oldFieldMap; } }