import java.util.ArrayList;
import java.util.Collections;
/*
集合的工具类(Collections):
笔试题目:说出Collection与Collections的区别:
Collection是一个单例集合的根接口
Collections是操作集合对象的工具类
Collections:常见方法:
1,对list集合进行排序。
sort(list);
//对list进行排序,其实使用的事list容器中的对象的compareTo方法
sort(list,comaprator);
//按照指定比较器进行排序
2, 对list进行二分查找:
前提该集合一定要有序。
int binarySearch(list,key);
//必须根据元素自然顺序对列表进行升级排序
//要求list 集合中的元素都是Comparable 的子类。
int binarySearch(list,key,Comparator);
3,对集合取最大值或者最小值。
max(Collection)
max(Collection,comparator)
min(Collection)
min(Collection,comparator)
4,对list集合进行反转。
reverse(list);
5,可以将不同步的集合变成同步的集合。
Set synchronizedSet(Set<T> s)
Map synchronizedMap(Map<K,V> m)
List synchronizedList(List<T> list)
*/
public class Demo1 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(12);
list.add(2);
list.add(19);
//排序
Collections.sort(list);
System.out.println("元素所在的索引值是:"+Collections.binarySearch(list, 12));
System.out.println("最大值"+Collections.max(list));
System.out.println("最小值:"+Collections.min(list));
Collections.reverse( list);
System.out.println(list);
list = (ArrayList<Integer>) Collections.synchronizedList(list);
}
}
package cn.itcast.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Person{
String name;
int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "{姓名:"+this.name +"年龄:"+this.age+"}";
}
}
class AgeComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.age - o2.age;
}
}
public class Demo2 {
//如果集合存储的都是不具备自然顺序的元素,那么排序需要传入比较器
public static void main(String[] args) {
ArrayList<Person> list = new ArrayList<Person>();
list.add(new Person("狗娃",12));
list.add(new Person("张三",22));
list.add(new Person("铁蛋",2));
Collections.sort(list,new AgeComparator());
System.out.println("找到的索引值是::"+Collections.binarySearch(list,new Person("铁蛋",2), new AgeComparator()));
System.out.println("最大值:"+Collections.max(list, new AgeComparator()));
System.out.println("最小值:"+Collections.min(list, new AgeComparator()));
System.out.println("集合的元素:"+list);
}
}
package cn.itcast.util;
import java.util.Arrays;
import java.util.List;
/*
数组的工具类(Arrays)
1,二分查找,数组需要有序
binarySearch(int[])
binarySearch(double[])
2,数组排序
sort(int[])
sort(char[])……
2, 将数组变成字符串。
toString(int[])
3, 复制数组。
copyOf(boolean[] original,int newLength);
original:原数组
newLength:新数组的长度
4, 复制部分数组。
copyOfRange(boolean[] original,int from,int to):
original:原数组
from:开始拷贝的索引值
to: 结束的索引值
5, 比较两个数组的元素是否一致。
equals(int[],int[]);
6, 将数组变成集合。
List asList(T[]);
这样可以通过集合的操作来操作数组中元素,
但是不可以使用增删方法,add,remove。因为数组长度是固定的,会出现
UnsupportOperationExcetion。
可以使用的方法:contains,indexOf。。。
如果数组中存入的基本数据类型,那么asList会将数组实体作为集合中的元素。
如果数组中的存入的引用数据类型,那么asList会将数组中的元素作为集合中
的元素。
*/
public class Demo3 {
public static void main(String[] args) {
Integer[] arr = {10,8,6,9};
Integer[] arr4 = {10,8,9,6};
Integer[] arr2 = Arrays.copyOf(arr, 6);
Integer[] arr3 = Arrays.copyOfRange(arr, 1, 3);
System.out.println("arr2拷贝后的数组是:"+Arrays.toString(arr2));//拷贝后的数组是:[10, 8, 6, 9, null, null] 如果是int类型的后面补两个0
System.out.println("arr3拷贝后的数组是:"+Arrays.toString(arr3));//拷贝后的数组是:[8, 6]
System.out.println("判断两个数组对应位置的元素是否完全一致:"+Arrays.equals(arr, arr2));
System.out.println("判断两个数组对应位置的元素是否完全一致:"+Arrays.equals(arr, arr4));
List<Integer> list = Arrays.asList(arr);//把数组变集合
//list.toArray();//把集合变数组
System.out.println(list);
}
}