直接开写
因为List有角标,是具备增删改查的集合。
addFirst() addLast() getFirst() removeFirst()这一类方法是linkedList特有的方法
getFirst() 获取但不删除
removeFirst() 获取并删除
堆栈:先进后出 first in last outFILO
队列:先进先出 First in first out FIFO
方法参数如果是父类的类型,那么子类传入之后就自动提升为父类类型
Set集合:元素是不可重复的,是无序的
Set接口中的方法和collection一致。
Hashset 内部数据结构是哈希表,是不同步的。
Treeset 内部数据结构是哈希表,是不同步的
如何保证集合元素的唯一性:
如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
如果对象的hashcode值相同,那么要再次判断对象的equals方法是否为true。
如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
所以如果元素要储存到HashSet集合中,必须要覆盖HashCode和Equals方法。一般toString也需要覆盖。
覆盖这些方法时为了根据元素自身的特点进行位置的确定。这样查找的速度快,只要通过算法得到要比较元素的地址,再对集合中这个位置的元素进行比较即可。
如果哈希冲突,解决办法有多种,顺延,串联。
Arraylist在判断元素是否相同,只用到contains方法,不用hash方法,数据结构不同,判断是否相同的方法也不同
删除一个元素,先找有没有,arraylist判断不相同就用equals
Hashset中判断的是hashcode和equals
Remove只能删除第一次出现的那个元素
LinkedHashSet是有序的
TreeSet
有指定顺序
可以对set集合中的元素进行排序。是不同步的。
Treeset 不看hashcode和equals方法
判断唯一性的方式,就是根据比较方法的返回结果是否为0,是0就是相同元素comparTo
Treeset对元素进行排序的方式一:
让元素自身具备比较功能,元素需要实现comparable接口。覆盖compareTo方法。
TreeSet集合第二种排序方式:
让集合自身具备比较功能。定义一个类事项comparator接口,覆盖compare方法
将该类对象作为参数传递给treeset集合的构造函数。
两个都在以比较器为主,实际开发中比较器
TreeSet使用二叉树的数据结构
每次存入元素之前都要对里面的进行二分法排序
------------------------------------------------------------------------------------------------------------------------------
今天的代码比较多,看上去比较简单,晚上自己联系代码的时候思路不是非常清晰,需要巩固代码思想。
---------------------------------------------------------
对象方法:
LinkedList:
offerFirst()
offerLast()
getFirst() 获取但不移除,如果链表为空 抛出异常nosuchelementexception
jdk1.6
removeFirst()
pollFirest();