今天来总结一些平时不起眼的东西。For Java.
for循环进行遍历删除元素
1 | ArrayList<String> list = new ArrayList(Arrays.asList("a", "b", "c", "d")); |
上述代码结果不尽人意:
1 | before :[a, b, c, d] |
这正是因为注释中说的那样,list.remove()操作完的时候list就已经改变了大小以及下标,故当”a”删除后list变成了["b","c","d"]
,然而下标变成了1,这时候取值就是变成了”c”,所以”b”这个元素就自然跳过了。
故我们在进行遍历删除list中元素时要使用Iterator迭代器来操作
变量声明
今天自己写了几行简单测试了下:
1.
1 | System.out.println("----------------start------------------"); |
结果为:
1 | ----------------start------------------ |
2.
1 | System.out.println("----------------start------------------"); |
结果为:
1 | ----------------start------------------ |
结果差了整10倍。想必数据一大自动拆装箱也挺累的吧。故之后变量要多次基本操作声明尽量不用包装类
String相关
intern()
1
2
3
4
5
6
7
8
9String str = "sss";
String str1 = new String("sss");
String str2 = str1;
System.out.println("str2.intern() == str1 >>" + (str2.intern() == str1));
System.out.println("str2.intern() == str3 >>" + (str2.intern() == str));
System.out.println("str2.intern().equals(str1) >>" + str2.intern().equals(str1));
System.out.println("str2 == str1 >>" + (str2 == str1));
System.out.println("str2.equals(str1) >>" + str2.equals(str1));结果:
1
2
3
4
5str2.intern() == str1 >>false
str2.intern() == str3 >>true
str2.intern().equals(str1) >>true
str2 == str1 >>true
str2.equals(str1) >>true我个人理解是,str2.intern()即是str1.intern()指向的故是常量池中的”sss”,常量池中的”sss”就是str,str1指向一个String对象,而equals比较大小就不说了。这里面说得就详细多了。
new String
1
2
3
4
5
6
7char[] c = { '1', '2', '3', '4', '5', '6', '7', '8' };
String strC = new String(c, 2, 3);
System.out.println("strC >>" + strC);
int[] arrInt = { 1, 2, 3, 4, 5, 6, 7, 8 };
String strI = new String(arrInt, 2, 3);
System.out.println("strI >>" + strI);结果:
1
2strC >>345
strI >>从下标2位置(包含)开始截取,数量为3
join
1
2String joinS = String.join(":", "e", "r", "y");
System.out.println("joinS >>" + joinS);结果:
1
joinS >>e:r:y
我们走进join源码看一下:
1
2
3
4
5
6
7
8
9
10public static String join(CharSequence delimiter, CharSequence... elements) {
Objects.requireNonNull(delimiter);
Objects.requireNonNull(elements);
// Number of elements not likely worth Arrays.stream overhead.
StringJoiner joiner = new StringJoiner(delimiter);
for (CharSequence cs: elements) {
joiner.add(cs);
}
return joiner.toString();
}发现了StringJoiner
StringJoiner
所以也可以这么用:
1 | StringJoiner joiner = new StringJoiner(","); |
结果:
1 | a,b,c |
Today End.