Java语法
Day19
晨考
Collections工具类
/*
Collection 集合工具类 此类中的方法全部为静态方法 此类种提供了用于操作集合的各种方法swap(List<?> list,int i,int j) 交换指定位置的集合中的元素
sort(List<T> list,Comparator<? super T> c) 根据指定的比较器引起的顺序对指定的列表进行排序
reverse(List<?> list) 反转指定列表中元素的顺序。
replaceAll(List<T> list, T oldVal,T newVal) 将列表中一个指定值的所有出现替换为另一个
min(Collection<? extends T> coll) 根据其元素的 自然顺序返回给定集合的最小元素
fill(List<? super T> list, T obj) 用指定的元素代替指定列表的所有元素
binarySearch(List<? extends Comparable<? super T>> list,T key) 使用二叉搜索算法搜索指定对象的
*/
public class TestCollections {public static void main(String[] args){List<Integer> list = new ArrayList<>();list.add(125);list.add(896);list.add(666);list.add(258);list.add(321);Collections.sort(list);for(Integer integer : list){System.out.println("integer = " + integer);}System.out.println("-----------------------------------------");int index = Collection.binarySearch(list,666);System.out.println("index = " + index);System.out.println("-----------------------------------------");// 获取集合中最大元素 要求元素必须可以比较大小 即 实现Comparable接口 或者 定义Comparator实现类Integer max = Collections.max(list);System.out.println("max = " + max);System.out.println("-----------------------------------------");Integer min = Collections.min(list);System.out.println("min = " + min);System.out.println("-----------------------------------------");// 交换指定位置的元素Collections.swap(list,0,3);for(Integer integer : list){System.out.println("integer = " + integer);}System.out.println("-----------------------------------------");// 2使用指定元素填充集合Collections.fill(list,999);for(Integer integer : list){System.out.println("integer = " + integer);}}
}
泛型
/*
泛型: 用于统一数据类型泛型可以使用的位置:类、接口、形参、返回值、属性自定义泛型,如何书写(泛型的名称可以使用任何单词 字母 大小写都可以 但是我们只推荐使用一些有公认的含义的一些大写字母)K key 键
V Value 值
T Type 类型
E Element 元素
R Return 返回值
P Parameter 参数
N Number 数值 表示范围为Number及其子类泛型初始化的时机:
1.类声明的泛型 是随着当前类创建对象初始化
2.接口声明的泛型 是随着实现类实现接口的初始化
*/
public class TestGenericType {}class A<T>{public void m1(T t){System.out.println("t = " + t);}public T m2(){return null;}
}class TestA{public static void main(String[] args){A a1 = new A();a1.m1("abc");System.out.println(a1.m2());A<Integer> a2 = new A<Integer>();a2.m1(100);System.out.println(a2.m2());A<Double> a3 = new A<Double>();a3.m1(100.5);System.out.println(a3.m2());}
}interface C<R,P>{R m1(P p);
}class C1 implements C<Boolean,String>{@Overridepublic Boolean m1(String s){return "abc".startsWith("a");}
}class C2 implements C<Double,String>{@Overridepublic Double m1(String s){return Double.parseDouble(s);}
}class TestC{public static void main(String[] args){C1 c1 = new C1();System.out.println(c1.m1("abc"));C2 c2 = new C2();System.out.println(c2.m1("123"));}
}
class Animal{}
class Pet extends Animal{}
class Dog extends Pet{}
class Cat extends Pet{}class TestPet{public static void m1(List<Pet> list){}// 泛型是不存在类型自动提升 // 要求形参为Pet类型 或者 Pet类的任意子类类型// ? extends 父类 : 表示泛型可以为父类 以及 父类的任何子类类型// Pet类的父类可以吗?public static void m2(List<? extends Pet> list){}/*要求:泛型为Dog 以及 Dog类的任何父类? super 子类: 表示反省可以为子类 以及 任何子类的父类表示设置泛型的下限 没有上限*/public static void main(String[] args){Vector<Pet> list1 = new Vector();ArrayList<Pet> list2 = new ArrayList<>();LinkedList<Pet> list3 = new LinkedList<>();m1(list1);m1(list2);m1(list3);System.out.println("---------------------------------------");Vector<Cat> list4 = new Vector();ArrayList<Pet> list5 = new ArrayList<>();m2(list4);m2(list5);m1(list1);ArrayList<Animal> list6 = new ArrayList<>();m2(list6);}
}