说明
在编程中我们一直会思考,我们如何将我们的代码写得更加好一些,而不至于一直写那些原生的代码,这样会看起来比较繁琐。其次,这里也总结了一些常用的编程技巧。
数组
1、如何优雅地将int[ ] ,char[ ],之类的数组转化成List集合呢?
很多人都会这样说,直接使用
new ArrayList(Array.asList(new int[]{1,2,4}));
但是这样得出来的结果会变成下面的形式:
List<int[ ]> intList = new ArrayList(Array.asList(new int[]{1,2,4}));
上面的不是我们想要的形式
所以我们可以使用流的方式来优雅得解决这个问题
int[] ints = new int[]{1,2,3};
List<Integer> intList = Arrays.stream(ints).boxed().collect(Collectors.toList());
但是如果我们使用我们的包装类数组,如Integer[ ] intergers 的形式,我们就可以直接使用Arrays.asList()的方式来转换。
2、输出数组,我们一般会使用遍历的方法,但是有一些时候,就非常不想使用遍历的方式来写,想使用一行代码搞定它,所以我们要活用Arrays工具类
int[] ints = new int[]{1,2,3};
System.out.println(Arrays.toString(ints));
集合
1、我们的集合元素下标是从0开始的,如果要得到集合中的倒数第k个元素,只需要:list.size() - k即可
linkedList.get(linkedList.size() - k);
2、如何将一个集合快速复制到另一个集合中,而不是new一个新的集合遍历之前的集合?
LinkedList<Object> linkedOne = new LinkedList<>();
linkedOne.add(1);
linkedOne.add(2);
linkedOne.add(3);
LinkedList<Object> linkedTwo = new LinkedList<>(linkedOne);
System.out.println(linkedTwo);
字符串
1、我们经常会遇到字符串反转,那么又该怎么样一步到位把字符串给反转呢?使用我们的StringBuilder或者StringBuffer
String str = "abc";
String reverseStr = new StringBuilder(str).reverse().toString();
System.out.println(reverseStr);
但如果我们使用的是这样:
StringBuilder builder = new StringBuilder("abc");
builder.reverse();
System.out.println(builder);
// 结果返回是的cba
说明StringBuilder和StringBuffer在reverseString的时候,会把原本的值给reverse,而不是保存这个值,然后把反转的值给返回给一个新的Builer或者Buffer。
2、字符串中,有时候会遇到这样一种问题:
String line = "a b c ";
我们直接使用line.spilt(" “)分割的时候,分割到c之后就不会再分割下去了,而如果我们使用line.spilt(” ",-1)的时候,就是连后面的空格也会分割成字符。
总结:
1.如果字符串最后一位有值,则没有区别,
2.若干最后n位都是切割符,split(" “)不会继续切分,split(” ", -1)会继续切分