Java-->List&Set
一、List集合
特点:有序可重复
List集合的猜想:
1、每个元素是不是应该有序号 index
2、addFirst、addLast、set(intdex, 对象)
3、get(index)....
1.1 ArrayList
ArrayList是List的一个实现类。
底层其实是使用的数组才实现的集合。
1、ArrayList中可以存储null。并且null也可以重复。
优点:元素查找速度很多。(有下表找到非常方便)
缺点:添加和删除效率低。
1.2 LinkedList
也是List的实现类。
底层是用链表实现的。
优点:添加和删除元素效率高。
缺点:查找的效率低。
使用的时候,仍然是使用的List的一些方法。
1.3、Stack
栈结构。 先进后出
二、Set集合
Set接口没有提供Collection接口额外的方法,但实现Set接口的集合类中的元素是不可重复的。总结:无序不可重复
2.1、HashSet
HashSet可以存储null。
HashSet存储的规则问题:
1、存入对象的时候,先获取要存入的对象的Hash值(hashCode方法的返回值)。
如果欲存入的对象的Hash值,与集合中的已经存入的对象的Hash值都不相等,
则认为不重复,添加成功。添加动作结束。
如果发现有与欲添加的对象的HashCode相等的对象,则进入下面的步骤。
2、判断这两个HashCode相等的对象是不是同一个对象,如果是同一个对象(==),则添加失败,添加动作完成。
如果不是同一个对象,则进行下面的步骤。
3、如果不是同一个对象,则调用欲添加对象的equals方法,把与这个对象HashCOde相等的那个对象作为参数传递。返回ture,则代表重复,添加失败。否则添加成功。
注意:在覆写hashCode和equals的时候,要保证这个两个方法重写的规则一样。
意思是说:当hashCode相等的时候,equals返回true。hashCode不等,则应该返回false。
总结:存储HashSet的时候,只需要覆写两个方法:hashCode和equals
Hash表:存了每个元素的Hash值。每新存入一个对象,都会查一次Hash表
2.1.1 LinkedHashSet
底层用栈实现的HashSet
可以保留顺序
以后较常使用