一.集合工具类Collections的概述和常用API:

-
addAll方法中第一个形参的数据类型为Collection<T>,意味着第一个参数是针对单列集合->所以addAll方法只能给单列集合Collection批量添加元素,双列集合Map是不行的
-
addAll方法中第二个形参T...elements是可变参数,意味着无论添加多少个元素都可以,元素类型不限
-
shuffle方法的形参List<?> list的数据类型为List< ? >,意味着只能传递List的子类集合即ArrayList集合、LinkedList集合和Vector集合
-
shuffle方法用于打乱List系列集合的元素的顺序,之所以针对List系列集合,是因为List系列集合是有序的,而Set系列集合是无序的,打乱Set系列集合没有任何意义
-
类Collections属于工具类,因此类Collections的构造方法会被私有化,不让外界创建类Collections的对象,而且工具类大多数方法都被static修饰,因此可以直接类名.方法名进行调用,类Collections同理:

二.集合工具类Collections还有其他的API方法:

-
第一个sort方法是按照默认规则进行排序
-
第二个sort方法的排序规则可以自己指定,其中第二个sort方法中的第二个形参Comparator<T> c的数据类型为接口Comparator<T>,使用该接口指定要排序的规则:




三.集合工具类Collections的常用API演示:
1.addAll方法:批量添加元素
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo1 {
public static void main(String[] args) {
//1.创建集合对象
ArrayList<String> list=new ArrayList<>();
//2.批量添加元素
Collections.addAll(list,"abc","bcd","qwer","df","asdf","zxcv","1234","qwer");
//3.打印集合
System.out.println(list);
//运行结果为[abc, bcd, qwer, df, asdf, zxcv, 1234, qwer]
}
}
2.shuffle方法:打乱List集合元素的顺序
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo1 {
public static void main(String[] args) {
//1.创建集合对象
ArrayList<String> list=new ArrayList<>();
//2.批量添加元素
Collections.addAll(list,"abc","bcd","qwer","df","asdf","zxcv","1234","qwer");
//3.打印集合
System.out.println(list);
//运行结果为[abc, bcd, qwer, df, asdf, zxcv, 1234, qwer]
//4.shuffle方法
Collections.shuffle(list);
//5.打印集合
System.out.println(list);
//运行结果为[zxcv, asdf, qwer, qwer, bcd, df, 1234, abc]
/*相对第一次打印结果,顺序已被打乱,而且每一次打乱的结果都会不一样*/
}
}
四.集合工具类Collections其他的API方法演示:
1.sort方法1:根据默认的规则进行排序
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo2 {
public static void main(String[] args) {
//默认规则,需要重写Comparable接口的compareTo方法->Integer已经实现,按照从小到大的规则排序
/*如果是自定义对象,需要自己指定规则*/
ArrayList<Integer> list=new ArrayList<>();
Collections.addAll(list,10,1,2,4,8,5,9,6,7,3);
Collections.sort(list);
System.out.println(list);
//运行结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
}
2.sort方法2:根据指定的规则进行排序,该方法的第二个形参是接口,使用该接口指定要排序的规则
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class CollectionsDemo2 {
public static void main(String[] args) {
ArrayList<Integer> list=new ArrayList<>();
Collections.addAll(list,10,1,2,4,8,5,9,6,7,3);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//按照从大到小的顺序排序,返回o1-o2就是按照从小到大的顺序排序
return o2-o1;
}
});
System.out.println(list);
//运行结果为[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
}
}
3.binarySearch方法:以二分查找法查找元素,二分查找前必须保证元素有序即升序或降序,要不然查找可能会遗漏
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo2 {
public static void main(String[] args) {
ArrayList<Integer> list=new ArrayList<>();
//需要元素有序,这样才能进行二分查找
Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);
System.out.println( Collections.binarySearch(list, 9) ); //运行结果为8,表示元素9在集合list中8索引的位置上
System.out.println( Collections.binarySearch(list, 1) ); //运行结果为0,表示元素1在集合list中0索引的位置上
System.out.println( Collections.binarySearch(list, 20) ); //运行结果为-11,小于0,表示元素20不在集合list中
}
}
4.copy方法:拷贝集合中的元素

-
copy两个参数dest和src的关系:第二个参数src的内容拷贝到第一个参数dest的内容里,最终被拷贝的数据中第一个参数dest的内容会被第二个参数src的内容覆盖,第二个参数src的内容不变
-
copy两个参数都是集合,由于是第二个参数src的内容拷贝到第一个参数dest的内容里,因此第一个参数dest集合的长度必须大于等于第二个参数src集合的长度,否则就会有部分元素拷贝到第一个参数dest集合外
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo2 {
public static void main(String[] args) {
//把list1中的元素拷贝到list2中
//会覆盖原来的元素
//注:如果list1的长度 > list2的长度,方法会报错
ArrayList<Integer> list1=new ArrayList<>();
ArrayList<Integer> list2=new ArrayList<>();
Collections.addAll(list1,1,2,3,4,5,6,7,8,9,10);
Collections.addAll(list2,0,0,0,0,0,0,0,0,0,0);
Collections.copy(list2,list1);
System.out.println(list1); //运行结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
System.out.println(list2); //运行结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
}
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo2 {
public static void main(String[] args) {
//把list1中的元素拷贝到list2中
//会覆盖原来的元素
//注:如果list1的长度 > list2的长度,方法会报错
ArrayList<Integer> list1=new ArrayList<>();
ArrayList<Integer> list2=new ArrayList<>();
Collections.addAll(list1,1,2,3,4,5,6,7,8,9,10);
Collections.addAll(list2,0,0,0,0,0,0,0,0,0,0,123);
Collections.copy(list2,list1);
System.out.println(list1); //运行结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
System.out.println(list2); //运行结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 123]
}
}
5.fill方法:使用指定的元素填充集合,具体是指用某个元素替换集合中的所有元素
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo2 {
public static void main(String[] args) {
//把集合中现有的所有数据,都修改为指定数据
ArrayList<Integer> list=new ArrayList<>();
Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);
Collections.fill(list,100);
System.out.println(list);
//运行结果为[100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
}
}
6.max/min方法:
a.根据默认的自然排序获取最大值/最小值:默认的自然排序就是先按照从小到大的顺序排序(注:String型中默认是按照字母的abcdefg...顺序进行排列的),然后找最大值和最小值
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo2 {
public static void main(String[] args) {
//求最大值或者最小值
ArrayList<Integer> list=new ArrayList<>();
Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);
System.out.println( Collections.max(list) ); //运行结果为10
System.out.println( Collections.min(list) ); //运行结果为1
}
}
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo2 {
public static void main(String[] args) {
//求最大值或者最小值
ArrayList<Integer> list=new ArrayList<>();
Collections.addAll(list,1,3,2,4,5,8,7,6,9,10);
System.out.println( Collections.max(list) ); //运行结果为10
System.out.println( Collections.min(list) ); //运行结果为1
}
}
b.自定义排序规则后再找最大值和最小值:
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class CollectionsDemo2 {
public static void main(String[] args) {
//String型中默认是按照字母的abcdefg...顺序进行排列的
/*现在要求按照字符串的长度进行排列,并且求出长度最长的字符串,
此时默认的规则无法满足,因此就需要自己指定规则*/
ArrayList<String> list=new ArrayList<>();
Collections.addAll(list,"a","aa","aaa","aaaa");
String result = Collections.max(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//o1.length() - o2.length()是一种排序规则
return o1.length() - o2.length();
}
});
/*o2.length() - o1.length()就不行,这样求出的最大值就是a,
这里可以在o2.length() - o1.length()和o1.length() - o2.length()之间相互试,
哪个结果符合要求,就用哪个*/
//打印
System.out.println(result); //运行结果为aaaa
}
}
7.swap方法:交换集合中指定位置的元素
package com.itheima.a05myCollections;
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo2 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list, 1, 2, 3);
Collections.swap(list, 0, 2); //这里指的是把list集合中0索引上的元素和2索引上的元素互换内容
System.out.println(list);
//运行结果为[3, 2, 1]
}
}
582

被折叠的 条评论
为什么被折叠?



