📄 sortcollectionquickfinder.java
字号:
package lib.commons.arithmetic.find;
import lib.commons.arithmetic.Compare;
public final class SortCollectionQuickFinder {
public static int size(java.util.List arg0) {
return null == arg0 ? 0 : arg0.size();
}
public static int size(Object[] arg0) {
return null == arg0 ? 0 : arg0.length;
}
public static Object get(java.util.List arg0, int arg1) {
return arg0.get(arg1);
}
public static Object get(Object[] arg0, int arg1) {
return arg0[arg1];
}
public static int find(Compare arg0, java.util.List arg1, Object arg2) {
return find(arg0, arg1, arg2, true);
}
public static int find(Compare arg0, java.util.List arg1, Object arg2,
boolean ascOrder) {
int findIdx = -1;
if (null == arg0 || size(arg1) == 0)
return findIdx;
int size = size(arg1);
int uPos = size - 1, lPos = 0, curPos = 0;
do {
if (ascOrder)
curPos = lPos + (uPos - lPos) / 2;
else
curPos = uPos - (uPos - lPos) / 2;
Object val = get(arg1, curPos);
if (arg0.compare(val, arg2) > 0) {
if (ascOrder)
uPos = (uPos == (lPos + 1)) ? lPos : curPos;
else
lPos = (uPos == (lPos + 1)) ? uPos : curPos;
} else if (arg0.compare(val, arg2) < 0) {
if (ascOrder)
lPos = (uPos == (lPos + 1)) ? uPos : curPos;
else
uPos = (uPos == (lPos + 1)) ? lPos : curPos;
} else {
findIdx = curPos;
break;
}
} while ((uPos > lPos));
if (uPos == lPos && -1 == findIdx) {
Object val = get(arg1, uPos);
if (arg0.compare(val, arg2) == 0) {
findIdx = uPos;
}
}
return findIdx;
}
public static int find(Compare arg0, Object[] arg1, Object arg2) {
return find(arg0, arg1, arg2, true);
}
public static int find(Compare arg0, Object[] arg1, Object arg2,
boolean ascOrder) {
int findIdx = -1;
if (null == arg0 || size(arg1) == 0)
return findIdx;
int size = size(arg1);
int uPos = size - 1, lPos = 0, curPos = 0;
do {
if (ascOrder)
curPos = lPos + (uPos - lPos) / 2;
else
curPos = uPos - (uPos - lPos) / 2;
Object val = get(arg1, curPos);
if (arg0.compare(val, arg2) > 0) {
if (ascOrder)
uPos = (uPos == (lPos + 1)) ? lPos : curPos;
else
lPos = (uPos == (lPos + 1)) ? uPos : curPos;
} else if (arg0.compare(val, arg2) < 0) {
if (ascOrder)
lPos = (uPos == (lPos + 1)) ? uPos : curPos;
else
uPos = (uPos == (lPos + 1)) ? lPos : curPos;
} else {
findIdx = curPos;
break;
}
} while ((uPos > lPos));
if (uPos == lPos && -1 == findIdx) {
Object val = get(arg1, uPos);
if (arg0.compare(val, arg2) == 0) {
findIdx = uPos;
}
}
return findIdx;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -