[size=large][color=red]1.下面输出的结果是[/color][/size]
Integer类的源码:
从上面代码可以看出系统把-128~127之间的整数自动装箱成Integer实例,并放入一个名为cache的数组缓存起来,如果把一个-128~127之间的整数自动装箱成一个Integer实例,实际上就是直接指向数组元素,所以相等;但每次把一个不在-128~127的范围内整数自动装箱成Integer实例时,系统需重新创建一个Integer实例。【ps:参考《疯狂java讲义》】
或者详细可见http://www.ticmy.com/?p=110
[size=large][color=red]2.如何将list中的值去重复且顺序不变[/color][/size]
1)网上比较常见的做法
2)比较简单的一种做法
LinkedHashSet原理可见:http://zhangshixi.iteye.com/blog/673319
顺便把list顺序不要求的代码也贴出来
[size=large][color=red]3.StringBuffer题[/color][/size]
输出结果是:AB=======B
[color=red]原因自己也不知,希望知道的朋友解答一下[/color]
顺便说说StringBuilder与StringBuffer的区别
其实两个的操作都相同,只不过StringBuilder不同步不安全的,但执行速度也更快,StringBuffer同步的,相对StringBuilder更慢些
Integer i1 = 127;
Integer i2 = 127;
System.err.println(i1 == i2);
i1 = 128;
i2 = 128;
System.err.println(i1 == i2);
false
true
Integer类的源码:
static final Integer[] cache = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length ; i++){
cache[i] = new Integer(i - 128);
}
}
从上面代码可以看出系统把-128~127之间的整数自动装箱成Integer实例,并放入一个名为cache的数组缓存起来,如果把一个-128~127之间的整数自动装箱成一个Integer实例,实际上就是直接指向数组元素,所以相等;但每次把一个不在-128~127的范围内整数自动装箱成Integer实例时,系统需重新创建一个Integer实例。【ps:参考《疯狂java讲义》】
或者详细可见http://www.ticmy.com/?p=110
[size=large][color=red]2.如何将list中的值去重复且顺序不变[/color][/size]
1)网上比较常见的做法
public static List<String> removeDuplicateWithOrder(List<String> list) {
HashSet<String> hashSet = new HashSet<String>();
List<String> newlist = new ArrayList<String>();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
String element = (String) iterator.next();
if (hashSet.add(element)) {
newlist.add(element);
}
}
list.clear();
list.addAll(newlist);
return list;
}
2)比较简单的一种做法
java.util.LinkedHashSet set = new LinkedHashSet(mylist);
ArrayList newList = new ArrayList(set);
LinkedHashSet原理可见:http://zhangshixi.iteye.com/blog/673319
顺便把list顺序不要求的代码也贴出来
public static void removeDuplicate(ArrayList arlList)
{
HashSet h = new HashSet(arlList);
arlList.clear();
arlList.addAll(h);
}
[size=large][color=red]3.StringBuffer题[/color][/size]
public static void main(String args[]){
StringBuffer s1 = new StringBuffer("A");
StringBuffer s2 = new StringBuffer("B");
isMathod(s1,s2);
System.out.println(s1+"======="+s2);
}
public static void isMathod(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
输出结果是:AB=======B
[color=red]原因自己也不知,希望知道的朋友解答一下[/color]
顺便说说StringBuilder与StringBuffer的区别
其实两个的操作都相同,只不过StringBuilder不同步不安全的,但执行速度也更快,StringBuffer同步的,相对StringBuilder更慢些