编程考试总结
最近参加了一个公司内部组织的编程考试,因为很久没有刷leetcode之类的题库,导致做的很艰难。现就考试中遇到的遗忘点做一些总结;
1.数组知识补充
数组声明
int[ ] a = new int[100]; //推荐写法
int a[] = new int[100]; //c语言数组风格
int[ ] a = {1,2,3,4,5};多维数组
int[ ][ ] a = {{1,2,3},{4,5,6},{7,8,9}};
不规则数组
Java实际上没有真正的多维数组,它其实是一维数组,数组中的每个元素也是一个数组;也就意味着数组长度的第二个参数可以为空
int[ ][ ] a = new int[5][];
举个例子,使用不规则数组存储九键拼音输入法九个键存储的字母
/**
* 手机九键拼音输入法:使用一个数组存储各个键盘的字母
* 2 abc 3 def...
* @return
*/
public static char[][] init(){
char[][] alphabet = new char[10][];
alphabet[2] = new char[]{'a','b','c'};
alphabet[3] = new char[]{'d','e','f'};
alphabet[4] = new char[]{'g','h','i'};
alphabet[5] = new char[]{'j','k','l'};
alphabet[6] = new char[]{'m','n','o'};
alphabet[7] = new char[]{'p','q','r','s'};
alphabet[8] = new char[]{'t','u','v'};
alphabet[9] = new char[]{'w','x','y','z'};
for (int i = 2; i < alphabet.length; i++) {
for (int j = 0; j < alphabet[i].length; j++) {
System.out.print(alphabet[i][j] + " ");
}
}
return alphabet;
}
2.数组和集合的转换
2.1集合到数组的转换
Object[] toArray();
T[] toArray(T[] a);
ArrayList<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
System.out.println(list);
Object[] array1 = list.toArray();
//toArray中传入数组参数
String[] array2 = list.toArray(new String[0]);
2.2数组到集合的转换
public static List asList(T… a)
注意这个方法有两个坑,使用时候需要规避
- 参数不能是基本数据类型的数组,必须是包装类数组或对象数组
- 方法返回的集合是Arrays的一个内部集合类,未重写add和remove方法,所以得到的集合无法进行正常的增删操作
//数组转化为集合
//数组转化为集合
Integer[] a = {1,2,3,4,5};
List<String> list1 = Arrays.asList("aaa", "bbbb", "cccc");
List<Integer> list2 = Arrays.asList(a);
//推荐方法1,ArrayList的构造方法
ArrayList<Integer> list3 = new ArrayList<>(Arrays.asList(a));
//推荐方法2,使用Stream类
List<Integer> list4 = Arrays.stream(a).collect(Collectors.toList());
list3.add(6);
list4.add(6);
3.排序
3.1数组排序
Arrays.sort()基本数据类型数组默认为升序,若需要降序则需要自己写排序算法;包装类则可以自定义排序
对象排序一般需要实现Comparator,Comparable接口