wordpress中文 速度慢/seo技术专员招聘
软件构造第一次实验的几个知识点
没啥难度,主要是写一下加深一下印象,大部分内容参考百度、CSDN(永远滴神)
1. Java的二维动态数组
-
普通数组实现
class Two_dimensional_dynamic_array{public statc main(String[] args){/*这种方式实际上并不能实现完全的两个维度上的动态扩展,只能实现一维的动态扩展*/int[][] array = new int[1000][];int[] a = new int[10];int[] b = new int[12];int[] c = new int[14];array[0] = a;array[1] = b;array[2] = c;} }
-
ArrayList实现
class Two_dimensional_dynamic_array{public statc main(String[] args){/*这种实现方式由于Java集合类不接受基本的数据类型,所以无法直接创建基本数据类型的二维数组(比如int[][]),需要进一步转化*/List<List<Integer>> array = new ArrayList<>();List<Integer> a = new ArrayList<>();a.add(1);a.add(2);array.add(a);List<Integer> b = new ArrayList<>();b.add(3);array.add(b);/*现在我们得到了一个List<List<Integer>>类型的二维动态数组,如果我们想得到一个Integer[][], *直接使用toArray(T[])方法行不通*///Integer[][] test = array.toArray(new Integer[0][0]);会报错/*** 我想到的办法就是:用循环将每个List<Integer>都转换为Integer[]。*/Integer[][] test = getArray(array);/*** 如果想进一步转化成int[][],请参考第五点*/}static Interger[][] getArray(List<List<Integer>> list) {Integer[][] Array = new Integer[list.size()][];for (int i = 0; i < list.size(); i++) {Array[i] = list.get(i).toArray(new Integer[0]);}return Array;} }
2. Java的输入输出
-
输入:InputStream和Reader
这两个类都是抽象类,不能创建具体的实例,但是有一个用于读取文件的输入流:FileInputStream(字节流)和FileReader(字符流)
public class Main {public static void main(String[] args) throws IOException {//FileInputSteamFileInputStream fis = new FileInputStream("File.txt");byte[] b = new byte[1024];while(fis.read(b)>0){//...}} }
public class Main {public static void main(String[] args) throws IOException {//FileInputSteamFileReader fr = new FileReader("File.txt");char[] c = new char[1024];while(fr.read(b)>0){//...}} }
以上两种只是演示了一下InputStream和Reader的基本用法,不方便,读取文件时一般会把他们包装成BufferedReader
//FileInputStream ==> InputStreamReader ==> BufferedReader BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(filePath))); //FileReader ==> BufferedReader BufferedReader in = new BufferedReader(new FileReader(filePath));
-
输出:OutputStream和Writer
这个和上面的输入没多大差别,只写一下通常用法
BufferedWriter out = new BufferedWriter(new FileWriter(file)); out.write("...")
3. List, Integer[ ], int[ ]的相互转换
这里基本上照着别人的博客敲了一遍,原博客地址https://www.cnblogs.com/cat520/p/10299879.html
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class Main {public static void main(String[] args) {int[] data = {4, 5, 3, 6, 2, 5, 1};//int[] ==> List<Integer>List<Integer> list1 = Arrays.stream().boxed().collect(Collection.toList());// Arrays.stream(arr) 可以替换成IntStream.of(arr)。// 1.使用Arrays.stream将int[]转换成IntStream。// 2.使用IntStream中的boxed()装箱。将IntStream转换成Stream<Integer>。// 3.使用Stream的collect(),将Stream<T>转换成List<T>,因此正是List<Integer>。//int[] ==> Integer[]Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new);// 前两步同上,此时是Stream<Integer>。// 然后使用Stream的toArray,传入IntFunction<A[]> generator。// 这样就可以返回Integer数组。// 不然默认是Object[]。// List<Integer> ==> Integer[]Integer[] integers2 = list1.toArray(new Integer[0]);// 调用toArray。传入参数T[] a。这种用法是目前推荐的。// List<String>转String[]也同理。//List<Integer> ==> int[]int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray();// 想要转换成int[]类型,就得先转成IntStream。// 这里就通过mapToInt()把Stream<Integer>调用Integer::valueOf来转成IntStream// 而IntStream中默认toArray()转成int[]。// Integer[] 转 int[]int[] arr2 = Arrays.stream(integers1).mapToInt(Integer::valueOf).toArray();// 思路同上。先将Integer[]转成Stream<Integer>,再转成IntStream。}
}