Java排序和数组转集合

编程考试总结

最近参加了一个公司内部组织的编程考试,因为很久没有刷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接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值