http://my.oschina.net/zhibuji/blog/84301
//设置星期day从0到6,0是星期一
//从Android闹钟源码中看到的,突然感觉自己特别呆,从来没用过位移啊,与或啊。这个算法利用位移比我以前写的要高效多了,拿出来学习一下,顺便告诉自己要善于运用以前学过的知识。提高代码效率,改善时间复杂度和空间复杂度。
int mDays = 0;//作为星期几的标识,0是空,1是星期1,10是星期二,11是星期一和星期二两天
public void set(int day, boolean set) {
if (set) {
mDays |= (1 << day);
} else {
mDays &= ~(1 << day);
}
}
private boolean isSet(int day) {
return ((mDays & (1 << day)) > 0);
}
public String toString() {
int[] DAY_MAP = new int[] {
Calendar.MONDAY,
Calendar.TUESDAY,
Calendar.WEDNESDAY,
Calendar.THURSDAY,
Calendar.FRIDAY,
Calendar.SATURDAY,
Calendar.SUNDAY,
};
StringBuilder ret = new StringBuilder();
// no days
if (mDays == 0) {
retrun "";
}
// every day
if (mDays == 0x7f) {
return "每天";
}
// count selected days
int dayCount = 0, days = mDays;
while (days > 0) {
if ((days & 1) == 1) dayCount++;
days >>= 1;
}
// short or long form?
DateFormatSymbols dfs = new DateFormatSymbols();
String[] dayList = (dayCount > 1) ?
dfs.getShortWeekdays() :
dfs.getWeekdays();
// selected days
for (int i = 0; i < 7; i++) {
if ((mDays & (1 << i)) != 0) {
ret.append(dayList[DAY_MAP[i]]);
dayCount -= 1;
if (dayCount > 0) ret.append(
","));
}
}
return ret.toString();
}


4787

被折叠的 条评论
为什么被折叠?



