------- android培训、java培训、java学习型技术博客、期待与您交流! ----------
知识点
10)Collections(Sort)
/*
* sort(List<T> list):根据元素的【自然顺序】 对指定列表按升序进行排序。
* sort(List<T> list, Comparator<? super T> c):根据指定【比较器】产生的顺序对指定列表进行排序。
*/
public class Collections_SortDemo {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method_sort();
}
public static void method_sort(){
List<String> list = new ArrayList<String>();
list.add("af");
list.add("fddf");
list.add("rtyr");
list.add("mgf");
list.add("jgh");
list.add("mgf");
sop("原集合:" + list);//打印集合。
Collections.sort(list);//自带的排序功能。
sop("排序 :" + list);
Collections.sort(list, new strLen());//传入比较器,按长度排序。
sop("比较器:" + list);
}
}
class strLen implements Comparator<String>{
public int compare(String s1, String s2){
if (s1.length() > s2.length())
return 1;
if (s1.length() < s2.length())
return -1;
return s1.compareTo(s2);
}
}
运行结果如下图所示:

11)Collections(Max)
/*
* max(Collection<?> coll):根据元素的自然顺序,返回给定 collection 的最大元素。
* max(Collection<?> coll, Comparator<? super T> comp):根据指定比较器产生的顺序,返回给定 collection 的最大元素。
* min(Collection<?> coll):根据元素的自然顺序 返回给定 collection 的最小元素。
* min(Collection<?> coll, Comparator<? super T> comp):根据指定比较器产生的顺序,返回给定 collection 的最小元素。
*
*/
import java.util.*;
public class Colls_MaxDemo {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method_Max();
}
public static void method_Max(){
List<String> list = new ArrayList<String>();
list.add("af");
list.add("fddf");
list.add("rtyr");
list.add("mgfvv");
list.add("jgh");
list.add("mgf");
String max1 = Collections.max(list);
sop("原集合:" + list);
sop("(排序前)Max1: " + max1);
Collections.sort(list, new strLen_max());//传入比较器,按长度排序。
sop("比较器:" + list);
String max2 = Collections.max(list, new strLen_max());
sop("(排序后)Max2: " + max2);//按字符串长度
}
}
class strLen_max implements Comparator<String>{
public int compare(String s1, String s2){
if (s1.length() > s2.length())
return 1;
if (s1.length() < s2.length())
return -1;
return s1.compareTo(s2);
}
}
运行结果如下图所示:

12)Collections(binarySearch)
/*
* int binarySearch(List<? extends Comparable<? super T>> list, T key):
* 如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
*/
public class Colls_binarySearchDemo {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method_binarySearch();
}
public static void method_binarySearch(){
List<String> list = new ArrayList<String>();
list.add("aa");
list.add("fddf");
list.add("rtyr");
list.add("mgfvv");
list.add("jgh");
list.add("mgf");
Collections.sort(list);
sop("list: " + list);
int index1 = Collections.binarySearch(list, "aa");//获取下标。
sop("index1: " + index1);
int index2 = Collections.binarySearch(list, "aaa");//如果集合中无需要查找的元素,返回 (-(插入点)-1)。
sop("index2: " + index2);
}
}
class strLen_binSea implements Comparator<String>{
public int compare(String s1, String s2){
if (s1.length() > s2.length())
return 1;
if (s1.length() < s2.length())
return -1;
return s1.compareTo(s2);
}
}
运行结果如下图所示:

13)Collections(替换反转)
/*
* void reverse(List<?> list):反转指定列表中元素的顺序。
* void replaceAll(List<T> list, T oldVal, T newVal):使用另一个值替换列表中出现的所有某一指定值。
* void swap(List<?> list, int i, int j):在指定列表的指定位置处交换元素
*/
public class Colls_fillDemo {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method_fill();
}
public static void method_fill(){
List<String> list = new ArrayList<String>();
list.add("aa");
list.add("fddf");
list.add("rtyr");
list.add("mgfvv");
list.add("jgh");
list.add("jgh");
list.add("jgh");
list.add("1mgf");
sop("原 = " + list);
Collections.replaceAll(list, "jgh", "2haha");//替换指定的全部元素。
sop("replaceAll = " + list);
Collections.reverse(list);//反转。
sop("reverse = " + list);
Collections.swap(list, 0, 1);//置换
sop("swap = " + list);
Collections.fill(list, "cc");//将集合中的元素全部替换。
sop("fill = " + list);
}
}
运行结果如下图所示:

14)Collections(reverseOrder)
/*
* void reverseOrder():返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。
*/
public class Colls_reverseOrderDemo {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method_revOder();
}
public static void method_revOder(){
TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());
ts.add("a");
ts.add("aa");
ts.add("bb");
ts.add("ccc");
ts.add("ddd");
for (Iterator<String> it = ts.iterator(); it.hasNext();){
sop(it.next());
}
}
}
运行结果如下图所示:

15)Collections(shuffle)
/*
* void shuffle(List<?> list):使用默认随机源对指定列表进行置换。
*/
public class Colls_shuffleDemo {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method_shuffle();
}
public static void method_shuffle(){
List<String> list = new ArrayList<String>();
list.add("a");
list.add("aa");
list.add("bb");
list.add("ccc");
list.add("ddd");
sop("原: " + list);
Collections.shuffle(list);//将集合中的运算随机置换位置。
sop("随机: " + list);
}
}
运行结果如下图所示:

16)Arrays
/*
* Arrays:用于操作数组的工具类。
* asList(T... a):将数组变成List集合。
* int binarySearch(Object[] a, Object key):使用二分搜索法来搜索指定数组,以获得指定对象。
* ?[] copyOfRange(?[] original, int from, int to):将指定数组的指定范围复制到一个新数组。
* original:将要从其复制一个范围的数组。
* 【?】==【数据类型】 from:要复制的范围的初始索引(包括)。
* to:要复制的范围的最后索引(不包括)。(此索引可以位于数组范围之外)。
* 包含取自原数组指定范围的新数组,截取或用 0 填充以获得所需长度 。
*
* boolean equals(?[] a, ?[] a2):如果两个数组相等,则返回 true
* boolean deepEquals(Object[] a1, Object[] a2):如果两个指定数组彼此是深层相等 的,则返回 true。
*
* void sort(?[] a):对指定的?型数组按数字升序进行排序。
* void sort(?[] a, int fromIndex, int toIndex):对指定?型数组的【指定范围】按数字升序进行排序。
*
* String toString(?[] a):返回指定数组内容的字符串表示形式。
*/
public class ArraysDemo {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method_toString();
}
public static void method_toString(){
int[] arr = {1, 2, 3, 4, 5};
sop("toString:" + Arrays.toString(arr));
String[] str = {"aa", "bbb", "cc", "ddd", "ee"};
/*
* 将数组变成集合的好处:可以使用集合的思想和方法来操作数组中的元素。
* 注意:将数组变成的集合,是不可以使用集合的增删方法的。因为数组的长度是固定的。
*/
List<String> list = Arrays.asList(str);
sop("contains:" + list.contains("cc"));
// list.add("abc");//不正确的操作异常:UnsupportedOperationException
sop("<String>asList:" + list);
/*
* 如果数组的元素都是对象,那么变成集合时,数组中的元素就能直接转换成集合中的元素。
* 如果都是基本数据类型,那么将会直接将该数组作为集合中的元素。
*/
Integer[] arr_int = {5, 4, 3, 2, 1};
List<?> li = Arrays.asList(arr_int);
sop("<Integer>asList:" + li);
}
}
运行结果如下图所示:

17)Collections(toArray)
/*
* Object[] toArray():包含此 collection 中所有元素的数组。
* <T> T[] toArray(T[] a):返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
* 注意:如果指定的数组能容纳 collection,并有剩余空间(即数组的元素比 collection 的元素多),
* 那么会将数组中紧接 collection尾部的元素设置为 null。
*/
public class Colls_toArrayDemo {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method();
}
public static void method(){
ArrayList<String> al = new ArrayList<String>();
al.add("abc");
al.add("bcde");
al.add("cdefg");
sop("al:\t\t" + al);
/*
* 1:集合中的数组到底要定义多少长度呢?
* 当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。
* 当大于集合的size时,该方法就不会创建新的数组,而是使用传递进来的数组。
* 所以创建一个刚刚好长度的数组最优。
*/
String[] arr_size = al.toArray(new String[al.size()]);
sop("arr_size:\t" + Arrays.toString(arr_size));
String[] arr_zdy = al.toArray(new String[5]);//多出的元素地址将存放null。
sop("arr_zdy:\t" + Arrays.toString(arr_zdy));
/*
* 2:为什么要将集合变数组?
* 为了限定对元素的操作。不需要用户进行增删操作。
*/
}
}
运行结果如下图所示:

18)高级for循环
/*
* 高级for循环。
* 格式:
* for (数据类型 变量名: 被遍历的集合()或者数组){
* 语句。
* }
* 对集合进行遍历的局限性:只能获取元素,但不能对集合进行操作。
* 而迭代器除了可以遍历,还可以进行remove集合中元素的动作,能改变集合中的元素。
* 如果使用ListIterator,还可以在遍历过程中进行(增删改查)的动作。
*
* 传统for循环与高级for循环的区别:
* 高级for有局限性:必须有被遍历的目标。
* 建议:在遍历数组的时候,还是希望使用传统for循环。因为传统for循环可以
*/
public class ForeachDemo {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method();
}
public static void method(){
ArrayList<String> al = new ArrayList<String>();
al.add("abc");
al.add("bcde");
al.add("cdefg");
for (String s : al){
sop("(原)?.next = " + s);//(1)打印
s = "hah";//(2)修改
sop("(改)?.next = " + s);//(3)打印(2)修改后的值。
}
sop("(原)al:" + al);//原集合。
System.out.println("-------------------------");
int[] arr = {3, 2, 1,};
for (int i : arr){
sop("i: " + i);
}
System.out.println("-------------------------");
HashMap<Integer, String> hs = new HashMap<Integer, String>();
hs.put(1, "a");
hs.put(2, "b");
hs.put(3, "c");
for (Integer i: hs.keySet()){
sop("keySet: " + i + "::" + hs.get(i));
}
for (Map.Entry<Integer, String> me: hs.entrySet()){
sop("entrySet: " + me.getKey() + "----" + me.getValue());
}
}
}
运行结果如下图所示:

19)可变参数。
/*
* 方法的可变参数。
* 例:method(int... arr);
* 在使用时注意:可变参数一定要定义在参数列表的最后面。
*/
public class ParamMethodDemo {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method();
}
private static void method(){
/*
* 可变参数其实就是new数组的简写形式。
* 不用每一次都手动的建立数组对象,只要将要操作的元素作为参数传递即可。
* 隐式的将这些参数封装成了数组。
*/
String[] s = {"第一个字符串", "第二个字符串"};
show(s, 1, 2, 4, 6);
show(s, 1, 2, 5, 4, 6);
}
private static void show(String[] s, int... arr){
sop("(字符串)s=" + s.length + "...(int型数组)=" + arr.length);
}
}
运行结果如下图所示:

20)静态导入
/*
* StaticImport:静态导入
* import static java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员。
* 当类名重名时,需要指定具体的包名。
* 当方法重名时,要指定具体所属的对象或者类。
*/
public class StaticImportDemo {
public static void sop(Object obj){
out.println(obj);
}
public static void main(String[] args) {
method();
}
public static void method(){
int[] arr = {3, 5, 6, 5};
String[] str = {"a", "bb", "ccc"};
sort(arr);//Arrays这个类的所以静态成员已经被导入。
sop("toString: " + Arrays.toString(arr));//当方法重名时,要指定具体所属的对象或者类。
sop("(arr)index: " + binarySearch(arr, 3));
sort(str);
sop("(str)index: " + binarySearch(str, "bb"));
}
}
运行结果如下图所示:

附言:我是Java新人,如有错误的地方请指出。
每天学习一点点,纠错一点点,进步很大点。