目录
4、注意事项(特殊之处,遍历无序的原因不是排序的无序,而是底层哈希值的存放地址的原因)
庖丁解牛术法总纲
吾生也有涯,而知也无涯 。以有涯随无涯,殆已!已而为知者,殆而已矣!为善无近名,为恶无近刑。缘督以为经,可以保身,可以全生,可以养亲,可以尽年。
“庖丁为文惠君解牛,手之所触,肩之所倚,足之所履,膝之所踦,砉然向然,奏刀騞然,莫不中音。合于《桑林》之舞,乃中《经首》之会。
文惠君曰:“嘻,善哉!技盖至此乎?”
庖丁释刀对曰:“臣之所好者,道也,进乎技矣。始臣之解牛之时,所见无非牛者。三年之后,未尝见全牛也。方今之时,臣以神遇而不以目视,官知止而神欲行。依乎天理,批大郤,导大窾,因其固然,技经肯綮之未尝,而况大軱乎!良庖岁更刀,割也;族庖月更刀,折也。今臣之刀十九年矣,所解数千牛矣,而刀刃若新发于硎。彼节者有间,而刀刃者无厚;以无厚入有间,恢恢乎其于游刃必有余地矣,是以十九年而刀刃若新发于硎。虽然,每至于族,吾见其难为,怵然为戒,视为止,行为迟。动刀甚微,謋然已解,如土委地。提刀而立,为之四顾,为之踌躇满志,善刀而藏之。”
——《庄子·养生主》
呔,妖怪。看法宝!
第一重境界:所见莫非全牛者
1、概述:
Set集合类似于一个罐子,程序可以依次把多个对象“丢进”Set集合,而Set集合通常不能记住元素的添加顺序。实际上Set就是Collection,只是行为略有不同(Set不允许包含重复元素)。
Set集合不允许包含相同的元素,如果试图把两个相同元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。
2、Set集合特点:
(1)、不包含重复元素的集合
(2)、没有带索引的方法,所以不能使用普通for循环遍历
3、分类(实现子类):
(1)、HashSet
(2)、TreeSet
4、所有已知实现类:
AbstractSet
,ConcurrentHashMap.KeySetView
,ConcurrentSkipListSet
,CopyOnWriteArraySet
,EnumSet
,HashSet
,JobStateReasons
,LinkedHashSet
,ReadOnlySetProperty
,ReadOnlySetPropertyBase
,ReadOnlySetWrapper
,SetBinding
,SetExpression
,SetProperty
,SetPropertyBase
,SimpleSetProperty
,TreeSet
5、注意事项
不包含重复元素的集合。 更正式地,集合不包含一对元素
e1
和e2
,使得e1.equals(e2)
,并且最多只有一个空元素。 正如其名称所暗示的那样,这个接口模拟了数学集抽象。该
Set
接口放置额外的约定,超过从继承Collection
接口,所有构造函数的合同,而位于该合同add
,equals
和hashCode
方法。 其他继承方法的声明也包括在这里以方便。 (这些声明中附带的规格已针对Set
接口进行了定制,但不包含任何其他规定。)构造函数的额外规定并不奇怪,所有构造函数都必须创建一个不包含重复元素的集合(如上所定义)。
注意:如果可变对象用作设置元素,则必须非常小心。 如果对象的值以影响
equals
比较的方式更改,而对象是集合中的元素,则不指定集合的行为。 这种禁止的一个特殊情况是,一个集合不允许将其本身作为一个元素。一些集合实现对它们可能包含的元素有限制。 例如,一些实现禁止空元素,有些实现对元素的类型有限制。 尝试添加不合格元素会引发未经检查的异常,通常为
NullPointerException
或ClassCastException
。 尝试查询不合格元素的存在可能会引发异常,或者可能只是返回false; 一些实现将展现出前者的行为,一些实现将展现出后者。 更一般来说,尝试对不符合条件的元素的操作,其完成不会导致不合格元素插入到集合中,可能会导致异常,或者可能会成功执行该选项。 此异常在此接口的规范中标记为“可选”。
6、所有方法
Modifier and Type 方法 描述 boolean
add(E e)
如果指定的元素不存在,则将其指定的元素添加(可选操作)。
boolean
addAll(Collection<? extends E> c)
将指定集合中的所有元素添加到此集合(如果尚未存在)(