1.集合中只能放置对象引用,无法放置原生数据类型,如若要放置原生数据,必须的包装成对象。集合中的对象都是object类型的,取出来应该转化为真正的类型。
2.LinkedList类:底层通过链表实现的。LinkedList类中的节点对象包含数据和引用(c中的指针)两个属性,以便实现对链表的操作。LinkedList类中的方法和ArrayList类中的方法相似。
3.链表分为单向链表,循环链表,双向链表,双向循环链表。
4.ArrayList和LinkedList的比较:
1)ArrayList底层用数组实现的,LinkedList底层是通过链表实现的。
2)ArrayList在查找数据时,效率比LinkedList高。
3)LinkedList在插入和删除数据时,效率比ArrayList高。
5.栈(Stack):FILO先进后出,最底的元素为栈底(bottom),最上面的元素称为栈顶(top)。其方法有压栈push();出栈pop();查看peek();实现栈既可以用线性表(ArrayList),也可以用链表(LinkedList)来实现。
6.队列(Queue):FIFO先进先出。第一个元素称为队首(front),最后一个元素称为队尾(rear)。
也可以通过线性表(ArrayList)和用链表(LinkedList)来实现。
7.ArrayList的构造方法:ArrayList有三个构造方法,ArrayList();ArrayList(int i); ArrayList(Collection c);调用第一个无参的构造方法,底层实现是通过调用ArrayList(int i)来实现的。如果采用第二中构造方法,由参数i来指定ArrayList的初始长度,而不是默认的长度10个。ArrayList(Collection c)通过集合C中的元素以其迭代的顺序来创建ArrayList.
8.ArrayList和LinkedList添加对象比较:
当向ArrayList中添加对象,在底层将该对象直接存储到数组中;当向LinkedList中添加对象,底层会生成Entry对象,其结构如下:
Entry{
Entry previous;
Object data;
Entry next;
}
最终将Entry加入链表中。
LinkedList类中维护的是一个个Entry对象。
9.Set:是一个接口,继承了Collection接口,set中的元素不能重复且是无序的。
10.当重写Object类的equals(Object o)方法时,一般情况下也应该重写hashCode()方法,以保持相等的对象有一样的哈希地址。反之,重写了hashCode()方法,也应该重写equals方法。Equals方法和hashCode方法总是相辅相成一起使用,它们使用的场景是判读Set集合能否加入新的元素。
11.String类的hashCode()方法重写了Object类的hashCode()方法,当两个字符串内容相同,根据底层实现,它们的hashCode()的值就相等。本质上,String类的hashCode()方法比较的是字符串内容。
12.Object类equals方法特性:
1)自反性: x.equlas(x)返回true;x非空
2)对称性: x.equlas(y)返回true则y.equlas(x)返回true. X,y非空
3)传递性:x.equlas(y)返回true, 并且y.equlas(z)返回true,那么x.equlas(z)返回true.x,y,z非空
4)一致性:x.equlas(y)返回true,多次调用还是放回true,前提对多次调用中对,x,y的信息没做任何修改。x,y非空
5) x.equlas(null)返回false,x非空
13.Object类hashCode()特点:
1)在java的一个应用执行过程中,对象多次调用hashCode()的返回值是一样的。前提是多次调用该对象的信息没有被改变。
2)对于两个对象的equals方法返回true,那么这两个对象的hashCode()值一定是相同。
3)当两个对象调用equals方法返回false,这两个对象的hashCode()的值不一定强制要求不一样。(可以相同也可以不同)不同可以提高应用的性能。
4)对于Object类来说,不同的对象的hashCode()值不同,hashCode()的值表示对象的地址。
1. 当要添加一对象进入HashSet时,hashCode()方法就会调用,判定已存在的对象的hashCode()的值是否和该对象的hashCode()值相等,如果不等,就直接加进HashSet;
如果不等,再调用equals方法和已存在的对象进行比较,如果返回true就加不进去,返回false就加进HashSet中。
2. 字符串的hashCode()方法和equals()方法都是根据字符串内容来比较的,两个字符串的内容一致,hashCode()方法返回值就一样,equals()就返回true。