知识点小计
集合
- 集合体系结构
单列集合Collection:一次添加一个数据。
双列集合Map:一次添加一对数据。
list系列集合:添加的元素是有序(指添加时的顺序和取出时的顺序是相同的),可重复,有索引。
Collection是一个接口,我们不能直接创建它的对象,所以在学习它的方法时,只能创建它实现类的对象。
添加元素时调用add方法:
如果要往List系列集合中添加元素,方法永远返回true,因为List系列集合允许元素重复
如果要往Set系列集合中添加元素,若当前添加元素不存在,方法返回true,表示添加成功;若当前添加元素存在,方法返回false,表示添加失败,因为Set系列集合的元素不允许重复。
因为Collection中定义的是共性的方法,所以调用Collection中的删除方法时不能通过索引进行删除,只能通过元素的对象进行删除。
删除方法会有一个布尔类型的返回值,删除成功返回true,删除失败返回false。
如果要删除的元素不存在,就会删除失败。
Collection接口中的contains方法底层是依赖equals方法进行判断是否存在的,所以,如果集合中存储的是自定义对象,也想用contains方法来判断是否包含,要在javabean类中重写equals方法,如果没有重写equals方法,那么默认使用的是Object类中的equals方法进行判断,但是Object类中的equals方法,是依赖地址值进行判断。
重写之后的equals方法,比较的就不是地址值了,而是属性值。
Collection的遍历方式有三种,1是迭代器遍历,2是增强for遍历,3是lambda表达式遍历。
迭代器就好比一个箭头,默认指向集合的0索引处。
迭代器的next方法的作用是,获取元素并移动指针。
迭代器遍历完毕后,指针不会复位,如果想再次遍历,就需要再创建一个迭代器对象。
循环中只能用一次next方法。
迭代器遍历时,不能用集合的方法进行增加或者删除,但可以用迭代器里的方法进行删除,添加暂无办法。
List接口中的add方法在指定索引上添加元素后,原索引上的元素会依次向后移。
List系列集合中有两个删除元素的方法,1是直接删除元素(实际参数默认为索引),2是通过索引进行删除。
在调用方法时,如果方法出现了重载,就会优先调用实参跟形参类型一致的那个方法。
List集合的5种遍历方式,1是迭代器遍历,2是列表迭代器遍历,3是增强for遍历,4是lambda表达式遍历,5是普通for循环。
数据结构就是计算机底层存储,组织数据的方式。
没有泛型的时候,我们可以给集合添加任意类型的数据。
多态的弊端是不能访问子类的特有功能。
如果没有给集合指定类型,会默认所有的数据类型都是Object类型,此时可以向集合中添加任意数据类型的元素,但存在弊端:在获取数据的时候,无法使用他的特有行为。
当在编写一个类的时候,如果不确定类型,这个类可以定义为泛型类。
泛型的通配符:?
?也表示不确定的类型,但他可以进行类型的限定。
?extends E: 表示可以传递E和E的所有子类类型。
?extends E: 表示可以传递E和E的所有父类类型。
泛型的应用场景:1.如果在定义类,方法,接口的时候,类型不确定,就可以定义泛型类,泛型方法,泛型接口;2.如果类型不确定,但是能知道以后只能传递某个继承体系中的,就可以用泛型的通配符;泛型通配符的关键点:可以限定类型的范围。
简单路径的特点:不能回头。
HashSet底层中有一个默认长度为16,默认加载因子为0.75的数组,数组名叫table,加载因子是HashSet的扩容时机,当16*0.75=12时,数组会扩大两倍。
当table中某条链表长度大于8而且数组长度大于等于64时,该链表会转化为红黑树。
TreeSet底层是红黑树。
Comparable方法中的this表示当前要添加的元素,o表示已经在红黑树中存在的元素。
直接打印TreeSet集合中的字符串元素,默认采用默认方式进行排序。
如果对TreeSet集合中的元素进行排序时,第一种排序方式跟第二种排序方式同时存在,则会按照第二种排序方式进行排序。
Map接口中put方法可以用来添加和覆盖。
在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合当中,此时返回值为null;在添加数据的时候,如果键存在,就会把原有的键值对对象覆盖,会把被覆盖的值进行返回。
Map中有三种遍历方式,1键找值,通过KeySet方法,获取所有的键,把这些键放到一个单列集合当中,再遍历单列集合,得到每一个键,再通过get方法,利用map集合中的键获取对应的值,2键值对,通过键值对对象进行遍历,用entryset方法获取所有的键值对对象,返回一个set集合,再遍历这个set集合去得到里面的每一个键值对对象,最后再调用get方法获取键和值,3lambda表达式。
Map接口中put方法的覆盖功能使得在添加数据的时,哈希值相同,如果键的属性值也相同,则后添加的数据会覆盖前添加的数据。
HashMap的键位值如果存储的是自定义对象,需要重写hashCoad和equals方法。
统计有计数器思想
新的统计思想:利用map集合进行统计,如果题目中没有要求对结果进行排序,默认使用HashMap;如果题目中要求对结果进行排序,使用HashMap,键:表示要统计的内容,值:表示次数。
可变参数的格式:属性类型...名字,方法形参的个数是可以发生变化的。
可变参数的细节:1.在方法的形参中最多只能写一个可变参数,2.在方法当中,除可变参数之外,还有其他的形参,可变参数要写在最后。