集合
一,分类
(1)单列集合 Collection
特点分析:
**注意事项一:1,Set集合下的LinkedHashSet 有序(以什么顺序输入,就以什么顺序输出),不可重复,无索引。
**注意事项二: 2,TreeSet 会自动排序,不可重复,无索引。TreeSet 如果存入的是基本类型和字符串,那么直接输出,TreeSet会自动排序。TreeSet 如果存入的是自定义对象,例如Student类 那么就需要自己写排序方法(排序2种方法如下)
方法一代码展示:
方法二代码展示:
方法二原理:
***注意事项三:3,Collection种的所有类 都可以同过 iterator,增强for,Lambda(forEach)进行遍历。 List因为有索引,同时还可以通过for循环来遍历。
**注意事项三:4,HashSet 如果需要添加自定义对象,例如(Student类),则该实体类必须重写hashCode()和equals()方法,如果不重写,默认以地址进行比较,无法做到不重复,所以需要重写两个方法。
**注意事项三:5,通过LinkedList addFirst(),addList(),removeFist(),removeLase(),push(),pop(); 通过以链的结构和这些方法,去实现栈,队列 的数据结构。
**注意事项三:6,集合在遍历过程种不允许去进行删除操作,如果非要进行删除操作,只能在iterator遍历过程中通过迭代器中的remove()方法进行操作。
Collection常用方法:
Collection集合遍历:
1)迭代器(Iterator)遍历
Iterator遍历注意事项:
1,注意报错 NoSuchElementException
2,当上面的循环结束后,迭代器的指针已经到了最后没有元素的位置 迭代器遍历完毕,指针不会复位
3,循环中只能调用一个next方法(例如,如果有两个next(),当集合中元素是奇数时,总会有一个没有元素而报错)
4,迭代器遍历时,不能 用集合的方法进行增加或则删除。 删除时,可以使用迭代器中的remove()方法进行删除。
2)增强for循环遍历(所有的单列集合和数组可以使用增强for)
for(Stirng s : coll){
}
注意: 1,增强for中的变量(s),不会改变集合中原本的数据
3).Lambda表达式遍历
List集合
LinkedList集合
LinkedList特有方法:
Set集合
没有自己特殊的方法,直接使用父类Collection的方法
HashSet
底层原理:
TreeSet --------如果是自定义对象(例如User类之类的对象),需要自己写排序方法。
双列集合
特点分析:
注意:
1,TreeMap 添加 自定义对象 时,必须重写比较方法。 TreeMap中自定义对象比较时,如果以对象中的某个属性去比较,特别注意 他会根据该属性是否重复进行判断,如果该属性重复,但该对象的其他属性不重复,也会被删除。
2,采用第二种Comparator比较器比较时,一定要先写 Comparator比较器接口的匿名内部类对象,并返回一个变量名,通过该变量名去添加 对象,例如(maps.put(new Girl("张三", 175, 45, 23),"lisi");)
Map集合常用方法:
注意:put() 一个作用是添加操作,另一个作用是覆盖,当后面添加的键值对前面已经有一个相同的键了,那么后来的会把前面的覆盖掉,并返回覆盖的值。
Map集合遍历方式:
1)通过键找值
2)通过键值对进行遍历
3)Lambda(forEach)遍历