1、Arrays与Array的区别
Array(数组类):是java中的最近本的一个存储结构,其中的数据类型要一致。
Arrays(静态类):是专门用来操作Array的,提供搜索、排序、复制等静态方法。
2、对 ArrayList 中的汉字(例如:姓名等)按照首字母排序
class SortByName implements Comparator {
@Override
public int compare(Object o1, Object o2) {
Student s1 = (Student) o1;
Student s2 = (Student) o2;
//在这里我先是转化为拼音再进行的排序直接以下方法排序可能会出现错误数据
return s1.getName().compareTo(s2.getName());
}
}
//根据姓名进行排序
Collections.sort(list, new SortByName());
3、打印数组
String[] stringArray = { "a", "b", "c", "d", "e" };
Arrays.toString(stringArray );
4、将数组转换为list
String[] stringArray = { "a", "b", "c", "d", "e" };
Arrays.asList(stringArray);
5、找到数组中某一个元素的索引
String[] arrays = new String[]{"a","b","c","d","e","fff","g","h","i","j",};
int positon = Arrays.binarySearch(arrays, "fff");
System.out.println("position is:"+positon);
这里有一个坑需要注意:
public static void main(String[] args) {
String[] arrays = new String[]{"3sefythe", "6rtww"," 4yvnsft",
"3i3a1", "3gadxz", "2x11jc7", "5tvn4",
"1lqylfsq", "17xdrb", "1fheo", "5h04mnj6",
"4t7r1m", "12yw8x", "4r812yt", "j1wxgj11",
"1edntr7g8", "3uexgtsfz", "4dtvsb"};
int positon = Arrays.binarySearch(arrays, "1edntr7g8");
System.out.println("position is:"+positon);
像上面这种数组元素中既有数字也有字母的时候排序是错误的,结果会出现负数。
我在网上搜了一下,Arrays.binarySearch这个方法是通过二分法实现的比较找索引
而二分法查找方法法:必须是有序数据,可以是数字,字母等下面是 binarySearch方法的实现:
public static int binarySearch(char[] array, int startIndex, int endIndex, char value) {
checkBinarySearchBounds(startIndex, endIndex, array.length);
int lo = startIndex;
int hi = endIndex - 1;
while (lo <= hi) {
int mid = (lo + hi) >>> 1;//无符号右移
char midVal = array[mid];
if (midVal < value) {
lo = mid + 1;
} else if (midVal > value) {
hi = mid - 1;
} else {
return mid; // value found
}
}
return ~lo; // value not present
}
像上面那样的无序字符串取索引,可以通过遍历的方法来取
String str = "1edntr7g8";
int positon = -1;
String[] arrays = new String[]{"3sefythe", "6rtww"," 4yvnsft",
"3i3a1", "3gadxz", "2x11jc7", "5tvn4",
"1lqylfsq", "17xdrb", "1fheo", "5h04mnj6",
"4t7r1m", "12yw8x", "4r812yt", "j1wxgj11",
"1edntr7g8", "3uexgtsfz", "4dtvsb"};
for (int i = 0; i < arrays.length; i++) {
if(arrays[i].equals(str)) {
positon = i;
}
}
System.out.println("position is:"+positon);