Collections用法
一:Collections的用法
1)在java.util.Collections;包中定义了他这几种用法;
1.1).sort( java.util.Comparator;包提供 下面截图)
1.2)实现用法
注意事项:
1.3)Collections 接口的用法Compartor(之前写过一个 排序的小例题 我把链接放着 看的去看 https://blog.csdn.net/liuwenqing11/article/details/112799114)
package Demo1;/*** @author Administrator*/
public class Student {String name;int age;public Student(String name, int age) {this.name = name;this.age = age;}public Student() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}package Demo1;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;/*** @author Administrator*/
public class StudentTest {public static ArrayList<Student> students(int number){ArrayList<Student> students = new ArrayList<>();for (int i = 0; i <number ; i++) {int age = (int)(Math.random()*10+20);Student student = new Student("王"+i,age);students.add(student);}System.out.println(students);Collections.sort(students, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return o2.age-o1.age;}});return students;}public static void main(String[] args) {System.out.println(students(3));}
}
2.)二分查找,返回所在的下标。没有找到返回负的下标值。( java.util.Comparator;包提供 下面截图)
举例实现。。。
3)反转( java.util.Comparator;包提供 下面截图)
public static void reverse(List<?> list) {int size = list.size();if (size < REVERSE_THRESHOLD || list instanceof RandomAccess) {for (int i=0, mid=size>>1, j=size-1; i<mid; i++, j--)swap(list, i, j);} else {// instead of using a raw type here, it's possible to capture// the wildcard but it will require a call to a supplementary// private methodListIterator fwd = list.listIterator();ListIterator rev = list.listIterator(size);for (int i=0, mid=list.size()>>1; i<mid; i++) {Object tmp = fwd.next();fwd.set(rev.previous());rev.set(tmp);}}}
3.1)实现截图
4)shuffle 翻译是洗牌 可以理解为 打乱重组 ( java.util.Comparator;包提供 下面截图)
public static void shuffle(List<?> list, Random rnd) {int size = list.size();if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {for (int i=size; i>1; i--)swap(list, i-1, rnd.nextInt(i));} else {Object arr[] = list.toArray();// Shuffle arrayfor (int i=size; i>1; i--)swap(arr, i-1, rnd.nextInt(i));// Dump array back into list// instead of using a raw type here, it's possible to capture// the wildcard but it will require a call to a supplementary// private methodListIterator it = list.listIterator();for (Object e : arr) {it.next();it.set(e);}}}
实现代码
5)swap 替换 指定一个目标集合以及两个元素的索引,交换这两个指定位置元素的值。
public static void swap(List<?> list, int i, int j) {// instead of using a raw type here, it's possible to capture// the wildcard but it will require a call to a supplementary// private methodfinal List l = list;l.set(i, l.set(j, l.get(i)));}/*** Swaps the two specified elements in the specified array.*/private static void swap(Object[] arr, int i, int j) {Object tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}
实现代码
6)fill 覆盖(替代、填充) 指定元素 替代指定列表中所有元素
public static <T> void fill(List<? super T> list, T obj) {int size = list.size();if (size < FILL_THRESHOLD || list instanceof RandomAccess) {for (int i=0; i<size; i++)list.set(i, obj);} else {ListIterator<? super T> itr = list.listIterator();for (int i=0; i<size; i++) {itr.next();itr.set(obj);}}}
代码实现
7)copy复制 源码方法
public static <T> void copy(List<? super T> dest, List<? extends T> src) {int srcSize = src.size();if (srcSize > dest.size())throw new IndexOutOfBoundsException("Source does not fit in dest");if (srcSize < COPY_THRESHOLD ||(src instanceof RandomAccess && dest instanceof RandomAccess)) {for (int i=0; i<srcSize; i++)dest.set(i, src.get(i));} else {ListIterator<? super T> di=dest.listIterator();ListIterator<? extends T> si=src.listIterator();for (int i=0; i<srcSize; i++) {di.next();di.set(si.next());}}}
实现
8)min max 列表中 最大最小值
public static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp) {if (comp==null)return (T)min((Collection) coll);Iterator<? extends T> i = coll.iterator();T candidate = i.next();while (i.hasNext()) {T next = i.next();if (comp.compare(next, candidate) < 0)candidate = next;}return candidate;}public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp) {if (comp==null)return (T)max((Collection) coll);Iterator<? extends T> i = coll.iterator();T candidate = i.next();while (i.hasNext()) {T next = i.next();if (comp.compare(next, candidate) > 0)candidate = next;}return candidate;}
实现代码
9)rotate 指定开始元素 连续旋转一圈结束
private static <T> void rotate1(List<T> list, int distance) {int size = list.size();if (size == 0)return;distance = distance % size;if (distance < 0)distance += size;if (distance == 0)return;for (int cycleStart = 0, nMoved = 0; nMoved != size; cycleStart++) {T displaced = list.get(cycleStart);int i = cycleStart;do {i += distance;if (i >= size)i -= size;displaced = list.set(i, displaced);nMoved ++;} while (i != cycleStart);}}private static void rotate2(List<?> list, int distance) {int size = list.size();if (size == 0)return;int mid = -distance % size;if (mid < 0)mid += size;if (mid == 0)return;reverse(list.subList(0, mid));reverse(list.subList(mid, size));reverse(list);}
实现截图
10)replaceAll 替换 指定元素替换指定元素 (全部)
public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) {boolean result = false;int size = list.size();if (size < REPLACEALL_THRESHOLD || list instanceof RandomAccess) {if (oldVal==null) {for (int i=0; i<size; i++) {if (list.get(i)==null) {list.set(i, newVal);result = true;}}} else {for (int i=0; i<size; i++) {if (oldVal.equals(list.get(i))) {list.set(i, newVal);result = true;}}}} else {ListIterator<T> itr=list.listIterator();if (oldVal==null) {for (int i=0; i<size; i++) {if (itr.next()==null) {itr.set(newVal);result = true;}}} else {for (int i=0; i<size; i++) {if (oldVal.equals(itr.next())) {itr.set(newVal);result = true;}}}}return result;}
实现代码
11)indexOfSubList 和 lastIndexOfSubList 元素第一次出现的位置和元素最后一次出现的位置
public static int indexOfSubList(List<?> source, List<?> target) {int sourceSize = source.size();int targetSize = target.size();int maxCandidate = sourceSize - targetSize;if (sourceSize < INDEXOFSUBLIST_THRESHOLD ||(source instanceof RandomAccess&&target instanceof RandomAccess)) {nextCand:for (int candidate = 0; candidate <= maxCandidate; candidate++) {for (int i=0, j=candidate; i<targetSize; i++, j++)if (!eq(target.get(i), source.get(j)))continue nextCand; // Element mismatch, try next candreturn candidate; // All elements of candidate matched target}} else { // Iterator version of above algorithmListIterator<?> si = source.listIterator();nextCand:for (int candidate = 0; candidate <= maxCandidate; candidate++) {ListIterator<?> ti = target.listIterator();for (int i=0; i<targetSize; i++) {if (!eq(ti.next(), si.next())) {// Back up source iterator to next candidatefor (int j=0; j<i; j++)si.previous();continue nextCand;}}return candidate;}}return -1; // No candidate matched the target}public static int lastIndexOfSubList(List<?> source, List<?> target) {int sourceSize = source.size();int targetSize = target.size();int maxCandidate = sourceSize - targetSize;if (sourceSize < INDEXOFSUBLIST_THRESHOLD ||source instanceof RandomAccess) { // Index access versionnextCand:for (int candidate = maxCandidate; candidate >= 0; candidate--) {for (int i=0, j=candidate; i<targetSize; i++, j++)if (!eq(target.get(i), source.get(j)))continue nextCand; // Element mismatch, try next candreturn candidate; // All elements of candidate matched target}} else { // Iterator version of above algorithmif (maxCandidate < 0)return -1;ListIterator<?> si = source.listIterator(maxCandidate);nextCand:for (int candidate = maxCandidate; candidate >= 0; candidate--) {ListIterator<?> ti = target.listIterator();for (int i=0; i<targetSize; i++) {if (!eq(ti.next(), si.next())) {if (candidate != 0) {// Back up source iterator to next candidatefor (int j=0; j<=i+1; j++)si.previous();}continue nextCand;}}return candidate;}}return -1; // No candidate matched the target}
实现代码
在文章最后说一下 如果忘记类的具体用法 在编辑器里面 写入方法名 然后 点击方法名 先按住Ctrl 在鼠标左健点击 例如Math类
Collections用法相关推荐
- java collections 用法_Java Collections unmodifiableCollection()用法及代码示例
java.util.Collections类的unmodifiableCollection()方法用于返回指定集合的不可修改视图.此方法允许模块为用户提供对内部集合的只读访问权限.对返回的集合&q ...
- Collections.binarySearch用法
<DiversityScoreMapping> int java.util.Collections.binarySearch(List<? extends Comparable< ...
- java sort 第二个参数_详解java Collections.sort的两种用法
Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式: public static > void sort(List list) { l ...
- python的userlist_Python Collections.UserList用法及代码示例
Python列表是array-like数据结构,但与之不同的是它是同质的.单个列表可能包含数据类型,例如整数,字符串以及对象. Python中的列表是有序的,并且有一定数量.根据确定的序列对列表中的元 ...
- python defaultdict 类属性_Python collections.defaultdict模块用法详解
Python中通过Key访问字典,当Key不存在时,会引发'KeyError'异常.为了避免这种情况的发生,可以使用collections类中的defaultdict()方法来为字典提供默认值. 语法 ...
- Counter 用法 from collections import Counter
from collections import Counter a = [1,4,2,3,2,3,4,2] b = Counter(a) #求数组中每个数字出现了几次 print(b)print( b ...
- java 同步 set_Java Collections synchronizedSet()用法及代码示例
java.util.Collections类的synchronizedSet()方法用于返回由指定集合支持的同步(线程安全)集合.为了保证串行访问,至关重要的是,对后备集的所有访问都必须通过返回的集来 ...
- java中Collections.sort() 排序函数的用法
java中Collections.sort() 排序函数的用法: 用Collections.sort方法对list排序有两种方法 第一种是list中的对象实现Comparable接口,如下: /** ...
- 集合排序 Collections.sort用法
大半夜,一同学来问这段代码.问了三个问题. 一,这个排序Sort()怎么用? 二,接口作为方法的参数是什么意思? 三,入参直接new Comparator(){}是怎么回事? 先回答第二,三个问题: ...
最新文章
- Fabrice Bellard:一个人抵得上一个百人团队
- cassandra java driver
- vim无法打中文_vim+ctags+cscope+Taglist+Nerdtree打造成sourceinsight
- 求职过程记录(5)——黎明到来
- 方舟原始恐惧mod生物代码_重磅!命令与征服和红色警戒源代码在GitHub公布了
- oracle json字符串转数组,json字符串转化成json对象(原生方法)
- 将Java 8日期时间API与JSF和Java EE 7结合使用
- php获取音频的时长,PHP编程获取音频文件时长的方法【基于getid3类】
- freeMarker 遍历 list,map,listmap
- python战斗2:看到一个页面编码
- 基于Xilinx Spartan-7 FPGA实现AD7606-8接口
- Dxg——Bat批处理 开发笔记整理分类合集【所有的相关记录,都整理在此】
- Apache OpenOffice-java调用时的问题总结
- php怎么将农历转换成公历,php 公历农历如何实现转换
- 超全!Python 处理日期与时间的全面总结!
- dede后台系统基本参数空白怎么办?
- 微信小程序 实时搜索并高亮关键字
- WeWork举步维艰,它的竞争对手们活的怎么样?
- 【2094. 找出 3 位偶数】
- 蒟蒻重返c++,学海拾贝