集合和泛型
Collection介绍
位于java.util包下。集合属于java的工具类,都位于util包下
Collection接口是集合体系的顶层接口,它是用来定义集合的最基本的操作行为
Iterator迭代器
List集合(有序的,可重复的)
继承了collection接口,有collection的所有方法,主要是围绕下标设计的
List集合特点:有序,可重复
List接口的实现类:ArrayList、LinkedList
Arraylist实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率较高--查询比较快
Linkedlist 采用链表存储方式,插入,删除元素效率比较高
1、Arrarylist
Arraylist是list接口的实现类,它采用的可变数组来存放元素。可变数组:会在ArrayList内部维护一个数组,用来存放调用add方法时传递进来的元素,当数组存放不下时,会在内部自动创建一个新的数组,先把原始的数组中的内容存储到新数组中,然后在新增加的内容放到数组的后面
ArrayList集合的特点:底层使用可变数组,存储的元素:有序、可重复
不足:查询快,增删慢。
增: add
删:remove (obj)删除指定元素 remove(int index)删除指定位置的元素,
clear()清空集合
改: set(int index,E element)修改指定位置的数组
查: get(int index)返回列表中指定位置上的元素
size()集合长度
isempty()判断集合是否为空,空返回true,否则返回false
contains(Object o)判断是否存在指定元素
遍历:for foreach iterator
iterator接口定义了三个方法:迭代器
- hasNext() 问集合中有没有下一个元素; 调用这个方法会返回一个boolean类型的值,如果有则返回true, 没有返回false
- next() 取出当前这个元素;, 取值
- remove() 删除当前的元素
2、LinkedList
Linkedlist也是list接口的实现类
底层采用的链表,由于链表有头有尾的数据结构,因此LinkedList集合中定义了自己的特有方法,这些方法都围绕链表的头尾设计的,
新增、删除元素时,效率比较高。
3、ArrayList 和Linkedlist比较 -记住
二者都是list接口的实现类 存储的元素都是有序可重复的
ArrayList底层维护的是可变数组来存放元素,查询快,增删慢
Linkedlist底层采用的是链表结构,增删快,查询慢
4、set集合
collection接口的另一个子接口--set集合
集合中存放不按特定方式排序,且不能保存重复的对象。
Hashset 是set接口的常用实现类
特点:无序、不可重复
1、hashset集合如何存放元素:
当我们给hashset中存放元素的时候,这时并不是直接把这个元素就存放到hashset内部维护的数组中。而是先根据当前要存放的那个元素,再结合一中算法(就是Object类中的hashcode方法),算出当前这个元素应该在数组中存储的位置。当存放数据的时候,如果计算出来的位置上已经有元素,这时还会去调用当前正要存放的这个元素的equals方法,把已经在计算出位置上的那个元素一起做比较,如果equals方法返回true,就丢弃当前要存放的元素,不再存储。如果equlas方法返回的false,当前对象还是要存储。
2、hashset集合是如何保证元素不重复的 --
存放时先调用hashcode方法,计算哈希值,根据哈希值来决定当前对象在集合中的存储位置。在存储的时候,如果遇到了哈希值相同的元素,这时集合的底层还会去调用当前对象的equals方法,判断当前正要存放的对象和位置上已经存在的对象是否是同一个对象,equlas方法返回的true,就认为相同对象,不保存,如果equlas方法返回false,当前对象会被保存
set集合不能使用传统for循环进行遍历,因为没有set方法。只能使用foreach和迭代器实现遍历
5、map集合
map集合存放具有一定对应关系的数据。在给map集合中存放对象的时候,一次要求存放一组(一对)对象。这个一组(一队)对象之间有一定的对应关系。因此把map集合成为双列集合
map集合常用方法
增加:put(key k,value v)
删除:remove(object key)根据key删除k+v ,clear();清空
修改:利用新增进行修改
获取:get(object key)根据指定的key获取mao集合中key对应的value值,如果key不存在,则返回null
size()获取key-value对应关系的个数
判断:containskey(object key)判断map中是否包含指定的key,有就返回true
containsvalue(object value)判断map中是否包含指定的value,有就返回 true
isempty()判断集合是否为null,
6、泛型
约束集合中存放数据的类型
一种泛型在一个集合中只能存在一种
泛型只能约束引用类型,如果想存储基本类型,必须使用其对应的包装器类型