目录
概念:特指某一种类型,防止数据的向上转型,使用过程中不用在向下转型类,简化操作
泛型的语法: <引用类型>,注意泛型不支持基本类型
泛型使用的范围:1、集合中 2、类和接口中 3、方法中
使用的语法:集合<数据类型:引用类型>:告诉JVM这个集合中只放这种类型的数据
泛型的嵌套:泛型里面可以包含泛型,<Map.Entry<String, String>>,外层泛型是Entry,内层泛型(嵌套泛型)是:String,String
泛型的上限和下限
<? extends 具体引用类型>:?表示任意类型,表示?的类型的上限是指定的类型
<? extends Number>: 表示类型上限Number
<? super 具体引用类型>:泛型的下限
ArrayList list = new ArrayList(); // 没有使用泛型,这个集合所有类型都会向上转型为Object ArrayList<Integer> list1 = new ArrayList<Integer>(); // 使用泛型 list.add("abc"); // 使用泛型以后集合有检查机制 这里会报错
HashMap<String, String> hm = new HashMap<>(); // 键值对都是String类型 hm.put("abc","123"); hm.put("bbc","132"); hm.put("cbc","231");
作用:
例:设计一个表示坐标的类 Pointer
class Pointer { private int x; // 横坐标 private int y; // 纵坐标
}
注意这里这个类的坐标只能用int,如果又想用double类型的就又需要重新创建一个类
class Pointer2 { private double x; // 横坐标 private double y; // 纵坐标 }
注:以上的类属性的数据类型不能确定,所有需要书写很多类,使用泛型类来处理
规范:
在Java中表示数据类型的符号(只能用于泛型)
规范的写法应该是使用一些字母(常见的字母):
E Element 元素:形参使用,任意的数据类型 T Type 类型,类,接口,方法上使用 K Key 键, V Value 值 也可以支持多个泛型参数例如Map<K,V>
使用泛型在类上
class Pointer<T> { // 泛型类,T表示任意的数据类型 ? ?private T x; // 横坐标 ? ?private T y; // 纵坐标 ? ? ?// T的使用范围:在整个类的非static修饰的方法中使用 }
使用泛型在方法上
// 设计一个方法用来合并两个数组 public static int[] merge(int[] arr1,int[] arr2) { ? } public static double[] merge(double[] arr1,double[] arr2) { ? } // 以上方法,参数的数据类型不确定,所以使用泛型方法来处理 ? // 泛型在方法中泛型放在方法的返回值类型之前 ? ?public static <T>T[] merge(T[] arr1, T[] arr2) { ? ? ? ?int len = arr1.length; // arr数组长度 ? ? ? ?arr1 = Arrays.copyOf(arr1,arr1.length + arr2.length); // 扩容arr1长度 ? ? ? ?System.arraycopy(arr2,0,arr1,len,arr2.length);//将arr2数组中的元素赋给arr1 ? ? ? ?return arr1; ? }
概念:Collections是操作Collection集合的工具类,全部是类方法
方法:
addAll(Collection<? super T> c, T... elements) 将所有指定的元素添加到指定的集合。
ArrayList<Integer> list = new ArrayList<>();// 泛型,只能装integer类的元素 Collections.addAll(list,10,20,30,40,50,60); // 向list集合加入数据 System.out.println(list);
binarySearch(List<? extends Comparable<? super T>> list, T key):使用二分查找查询集合中元素的位置
int i = Collections.binarySearch(list, 30); // 需要对元素进行排序 System.out.println(i); // 打印2
fill(List<? super T> list, T obj) :填充集合
max(Collection<? extends T> coll) :找出集合中最大的值 最小值同理
Integer max = Collections.max(list); System.out.println(max);
reverse(List<?> list) :翻转集合元素
Collections.reverse(list); System.out.println(list);
shuffle(List<?> list):洗牌方法,打乱list集合中元素的顺序
Collections.shuffle(list); System.out.println(list);
sort(List<T> list) :对list集合元素进行排序
swap(List<?> list, int i, int j) :交换集合中指定位置的元素
概念:File:就是表示你要操作的文件或文件夹
字段(属性)
目录分割符(一个路径里面的):/ 路径分隔符:(多个路劲之间的分割); pathSeparator:路径分割符,;
// e:/pp/lw.avi;e:/cc/lw.aviseparator:目录分割符
构造方法
1)、File(String pathname):通过传入的路径创建File对象? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2)、File(String parent, String child):在指定符目录下面,创建子目录或文件 parent:只能表示文件夹 child:可以是文件夹,也可以是文件? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3)、File(File parent, String child)
常用的方法
1)、表示判断方法 isDirectory() :判断file对象是否为文件夹(目录),必须要存在 isFile():判断file对象是否为文件 exists():判断file对象是否存在
2)、获取名字的方法 getName() :获取名字 getParent():获取符目录 getPath():File转换为字符串的路径
3)、创建与删除 mkdir():只能创建一级目录 、 mkdirs() 可以创建多级目录:创建文件夹 createNewFile():创建的是空文件 delete():删除文件和空文件夹
4)、将制定文件夹中所有的文件或文件都获取 list():将制定目录下所有的文件和文件夹的名字,放入一个字符串数组 listFiles():将制定目录下所有的File对象,放入一个File数组
文件的相关基础:
文件:保存数据的,文件间区分,使用后缀名区分
注:文件用来保存数据的,文件不能再包含文件,文件能读写操作,文件夹不行!!!
怎样找到一个文件?通过文件的路径来找到文件
文件的路径:
1)、绝对路径:从盘符开始的路径
e:/1.txt:绝对路径
2)、相对路径,没有从盘符开始的路径
1.txt:相对路径,相对你正在操作的文件路径
文件夹:管理文件或文件夹的,文件夹里面可以有文件夹和文件
怎样区分一个路径是文件夹还是文件:
1)、e:/pp/cc/lw.avi:表示是文件,因为有后缀名
2)、e:/pp/cc:表示的是文件夹
一个文件夹或文件的组成:目录 + 名字
1)、 e:/pp/cc/lw.avi 路径
2)、e:/pp/cc/:文件的目录
3)、lw.avi:文件名
文件或文件的操作
1)、创建文件、删除文件、复制文件、剪切文件