Java中的查找:
顺序查找,指从第一个元素开始,以此查找。典型的有List中的indexOf方法。
int index=list.indexOf("内容"); 该方法的本质就是顺序查找。当数据量庞大时,效率低下。
二分查找,二分查找的前提是该内容是有序的,因此处于无序状态的需要先进行排序。类似于人们玩猜大小的游戏。Java的util包中的Arrays类的binarySearch方法可以进行二分查找,它以一个数组和目标值作为输入,返回目标的索引值。如果不存在,就返回一个负值,该负值为如果此数在数组中,那么它应该在的位置。 列表可以利用Collections.binarySearch(list,target)达到同样的效果。
Java中的排序:
Java对于数组提供了排序方法,还是那个Arrays类,Arrays.sorts(数组名);同样的,这是依托于类实现了Compareable接口
List的排序利用的是Collection.sort(list)
当处理原数据类型的数据时,Arrays.sort采用的快速排序;当处理对象数据时,Collection和Arrays采用的是归并排序。
Arrays.binarySearch(array,value) | 在一个已经排好序的数组中返回索引值,不存在则返回负数 |
---|---|
Arrays.sort(array) | 数组排序 |
Collections.binarrySearch(list,value) | 在一个已经排好序的列表中返回索引值,不存在则返回负数 |
Collection.shuffle(list) | 打乱排序(随机排序) |
Collection.sort(list) | 列表排序 |
比较器
按照自定义规则进行排序,例如按照String的长度进行排序。
比较器的声明规则:不同于之前见到的Compareable接口,比较器的声明在一个新的类之中。并且它包含两个比较的对象,而不是之前见到的一个。
import java.util.Comparator;
public class ui implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
}
调用比较器就很简单了,sort函数有两个参数,我们之前只用了一个,第二个就是为比较器预留的。
import java.util.*;
public class Main {
public static void main(String[] args) {
String [] a=new String[3];
a[0]="Hello";
a[2]="jkj";
a[1]="LLLLLLLLLLLLLLLL";
Arrays.sort(a,new ui());//注意如此声明
System.out.println(Arrays.toString(a));//输出数组的方法应该好好看看。
}
}
对String排序中对大小写不敏感利用String类中的比价器常量CASE_INSENSITIVE_ORDER