1.排序与混排:
如今排序算法已经成为大多数编程语言标准库中的一个组成部分
1.1java.util.Collections 1.2:
static <T extends Comparable<? super T> void sort(List<T> elements)
使用稳定的排序算法,对列表中的元素进行排序。这个算法的时间复杂度是O(n logn),其中n为列表长度
static void shuffle(List<?> elements)
static void shuffle(List<?> elements , Random r)
随机地打乱表中的元素。这个算法的时间复杂度是O(n a(n)),n是列表的长度,a(n)是访问元素的平均时间
1.2java.util.List<E> 1.2:
default void sort(Comparator<? super T> comparator) 8
使用给定比较器对列表排序
1.3java.util.Comparator<T> 1.2:
static <T extends Comparable<? super T>> Comparator<T> reverseOrder() 8
生成一个比较器,将逆置Comparable接口提供的顺序
default Comparator<T> reversed() 8
生成一个比较器,将逆置这个比较器提供的顺序
2.二分查找:
只有采用随机访问,二分查找才有意义
2.1java.util.Collections 1.2:
static <T extends Comparable<? super T>> int binarySearch(List<T> elements , T key)
static <T> int binarySearch(List<T> elements , T key , Comparator<? super T> c)
从有序列表中搜索一个键,如果元素拓展了AbstractSequentialList类,则采用线性查找,否则将采用二分查找。
这个方法的时间复杂度为O(a(n) log n),n为列表的长度,a(n)是访问一个元素的平均时间。
这个方法将返回这个键在列表中的索引,如果在列表中不存在这个键将返回负值i。
这种情况下,应该将这个键插入到列表索引-i-1的位置上,以保持列表的有序性
3.简单算法:
3.1java.util.Collections 1.2:
static <T extends Comparable<? super T>> T min(Collection<T> elements)
static <T extends Comparable<? super T>> T max(Collection<T> elements)
static <T> min(Collection<T> elements , Comparator<? super T> c)
static <T> max(Collection<T> elements , Comparator<? super T> c)
返回集合中最小的或最大的元素(为清楚起见,参数的边界被简化了)
static <T> void copy(List<? super T> to , List<T> from)
将原列表中的所有元素复制到目标列表的相应位置上。目标列表的长度至少与原列表一样
static <T> void fill(List<? super T> l , T value)
将列表中的所有位置设置为相同值
static <T> boolean addAll(Collection<? super T> c , T... values) 5.0
将所有的值添加到集合中,如果集合改变了则返回true
static <T> boolean replaceAll(List <T> l , T oldValue , T newValue) 1.4
用newValue取代所有值为oldValue的元素
static int indexOfSubList(List <?> l , List<?> s) 1.4
static int lastIndexOfSubList(List<?> l , List<?> s) 1.4
返回l中第一个或者最后一个等于s子列表的索引。如果l中不存在等于s的子列表,则返回-1.
static void swaq(List<?> l, int i, int j) 1.4
交换给定偏移量的两个元素
static void reverse(List<?> l)
逆置列表中元素的顺序
static void rotate(List<?> l, int d) 1.4
旋转列表中的元素,将索引i的条目移动到位置(i+d)%l.size()
static int frequency(Collection<?> c1 , Collection<?> c2) 5.0
返回c中与对象o相同的元素个数
boolean disjoint(Collection<?> c1 , Collection<?> c2) 5.0
如果两个集合没有共同元素,则返回true
3.2java.util.Collection<T> 1.2:
default boolean removeIf(Predicate<? super E> filter) 8
删除所有匹配的元素
3.3java.util.List<E> 1.2
default void replaceAll(UnaryOperator<E> op) 8
对这个列表的所有元素应用这个操作
4.批处理:
很多操作会“成批”复制或者删除元素,例如removeAll(...)等等,其实最好是对视图进行操作,这样既能够很好的完成任务,也能够界定范围。
5.集合与数组的转换:
如果需要把一个数组转换为集合,ArrayList.asList包装器可以达到这个目的
String[] values = ...;
HashSet<String> staff = new HashSet<>(ArrayList.asList(values));
从集合得到数组会更加困难一些。当然,可以使用toArray方法:
Object[] values = staff.toArray();
不过,这样的结果是一个Object数组还不能够强制转换,所以稍微改变一下:
String[] values = staff.toArray(new String[0]);