一、实例
==和equals比较的具体实例:
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
String str9 = "a"+"bc";
System.out.println(str1 == str2);//true
System.out.println(str9 ==str2);//true
String strb1 = new StringBuilder("abc").toString();
System.out.println(str1 == strb1);//false
String str3 = new String("abc");
System.out.println(str1 == str3);//false
String str4 = new String("abc").intern();
System.out.println(str1 == str4);//true
Integer a = 100;
Integer b = 100; //Integer的域值范围-128~127,超出范围就不能用==比较了,相当于new出了新的地址
int c = 100;
Integer d = 130;
Integer e = 130;
int f = 130;
System.out.println(a == b);//true
System.out.println(a == c);//true
System.out.println(d == e);//false
System.out.println(d == f);//true
}
输出:
false
false
true
true
true
false
true
二、Java的集合框架
1.collection
①List、Set、Queue
2.map
三、集合中List
1.List是一个有序的Collection,它具有精确性(能够精确的控制每个元素插入的位置,能够通过索引来访问List中的元素);
2.List中的元素允许有相同的元素(重复性);
3.List接口存储一组不唯一,是有序的对象。
四、集合中的Set
1.Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素(不重复性);
2.Set 接口存储一组唯一,无序的对象(无序性)。
五、List接口的常用实现类
ArrayList:
它基于数组来实现集合的功能,其内部维护了一个可变长的对象数组,集合内所有对象存储于这个数组中,并实现该数组长度的动态伸缩。
ArrayList使用数组拷贝来实现指定位置的插入和删除:
这个就是可以根据数组下标来索引追踪到具体位置来进行变化。
linkedList:
它基于链表来实现集合的功能,其实现了静态类Node,集合中的每个对象都由一个Node保存,每个Node都拥有到自己的前一个和后一个Node的引用。
ArrayList和linkedList之间的区别:
1.ArrayList的随机访问更高,基于数组实现的ArrayList可直接定位到目标对象,而linkedList需要从头Node或尾Node开始向后/向前遍历若干次才能定位到目标对象;
2.linkedList在头/尾节点执行插入/删除操作的效率比ArrayList要高;
3.linkedList所占的内存空间要更小一些。
六、Vector
Vector和ArrayList都是基于数组实现的集合,它和ArrayList的主要区别:
1.Vector是线程安全的,Array不是;
2.Vector中的方法基本都是synchronized的,其性能低于ArrayList;
3.Vector可以定义数组长度扩容的因子,ArrayList不能。



