List集合
继承了collection接口
List接口的三大特点
1.有序集合,存储元素和取出元素的顺序一致
2.有索引
3.允许存储重复元素
带索引特有的方法
注意一定不要越界
list集合遍历:
1.for循环
2.迭代器:先list.iterator返回一个迭代器再用这个迭代器与while循环配合:while循环小括号里面放迭代器.hasNext
3.增强for循环:for(String s :list)
list集合的子类---arraylist
数组底层实现,所以有数组的特点
list集合的子类---LinkedList
底层链表实现:
1.有大量的操作头尾的方法
2.方便添加和删除元素
使用Linkedlist 不能用多态,因为LinkedList有很多特有的方法
常用方法:
Vector(了解)
HashSet集合介绍
set接口同list接口:都继承了collection接口
特点:
1.不能存重复元素
2.没有索引,没有带索引的方法,不能使用普通for循环遍历
HashSet:
1.不能存重复元素
2.没有索引,没有带索引的方法,不能使用普通for循环遍历
3.这是一个无序的集合:存取元素顺序不一致
4.底层是一个哈希表结构:查询速度很快
哈希值
是一个十进制的整数:模拟出来的地址值
这是object类的方法
set不重复的原理
HashSet存自定义类型的元素
必须重写哈希hashcode和equal的方法
要求:同名和同年龄的人是同一个人,只能存一次
当没有重写hashcode的时候那么哈希值会相同
equal默认比较两个对象的地址,所以,如果没有重写则会认定不同
重写这两个方法的快捷键是alt+insert同加构造方法与getset方法
LinkedHashSet集合
底层是哈希表(数组,链表,红黑树)加上链表(记录元素的存储顺序保证元素有顺序)
可变参数
当方法的参数列表以及确定,但是参数个数不确定,可以使用可变参数
使用格式:
定义方法的时候使用
修饰符 返回值 方法名 方法名(数据类型...变量名){}
可变参数的原理:
可变参数底层是数组,根据传递参数的个数不同会根据参数的个数不同来创建不同长度的数组,来存这些参数,可以是0个到多个
使用:
例如之前定义的两数相加的方法,现在想定义成所有的数相加
注意事项:
1.一个方法的参数列表,只能有一个可以变参数
2.如果方法参数有多个,那么参数必须写在参数列表的末尾
可变参数的终极写法(object。。。obj):这样就可以想传什么就什么了
collections操作集合的工具类的方法
shuffle和sort都是只能传递list集合不能传递set集合
当想使用sort方法给自定义类进行排序的时候需要注意这个自定义类需要实现comparable重写compareto去定义排序的规则
默认返回0是认为元素都是相同的,比较两个人的年龄
排序规则:如果是this-参数则是升序,参数-this就是降序
comparable和comparator的区别
comparable:自己需要重写,比较this和参数的大小实现升序降序
comparator:相当于找一个第三方裁判
o1-o2是升序,o2-o1是降序
自定义类排序(扩展了解)