我们学习的是面向对象的编程语言,面向对象的编程语言对事物的描述都是通过对象体现的, 为了方便对多个对象进行操作,我们就必须把这多个对象进行存储,而要想存储多个对象,就不能是 基本的变量了,应该是一个容器类型的变量。回顾我们学过的知识,有哪些是容器类型的呢? 数组,StringBuilder 首先说StringBuilder,它的结果是一个字符串,不一定满足我们的需求,所以我们只能 选择数组了,而数组的长度固定,不能适应变化的需求,在这种情况下,Java就提供了集合类供我们使用。 由此可见,集合类的长度是可变的。
集合类的特点:长度可变。 1.Collection是一个接口,它是List和Set的父接口
。因为是接口所以不能直接创建Collection对象,只能创建它的子类对象的方式来调用它的方法。
2.Collection的成员方法:
boolean add(E e) //添加元素
void clear() //清空集合
boolean contains(Object o)//集合是否包含某个元素
boolean isEmpty()//集合是否为空
boolean remove(Object o) //删除元素
int size() //返回集合的大小
Object[] toArray() //把集合转化成Object[]
Iterator<E> iterator() //返回迭代器
3.Collection集合的遍历方式
①.toArray(),可以把集合转换成数组,然后遍历数组即可
②.iterator(),可以返回一个迭代器对象,我们可以通过迭代器对象来迭代集合
注意:这里说的是集合的遍历方式,很多同学会下意思的觉得不是还可以使用for循环和索引来遍历。但是那个其实是遍历ArrayList的遍历方式。我们说ArrayList属于Collection集合的一种。其他有些Collection集合并不能使用这种方式遍历。所以这里Collection集合的遍历方式指的是所有Collection集合通用的方式
List集合:
List集合的特点:
A:有序(存储和取出元素的顺序一致)
B:存储的元素可以重复
List集合的特有成员方法
void add(int index,E element):在指定位置添加元素
E remove(int index):删除指定位置的元素
E get(int index):获取指定位置的元素
E set(int index,E element):修改指定位置的元素
List集合的遍历:
A:迭代器
B:普通for循环
List集合子类特点及ArrayList集合存储字符串并遍历
List:
ArrayList:底层数据结构是数组,查询快,增删慢
LinkedList:底层数据结构是链表,查询慢,增删快
ArrayList存储字符串并遍历:
A:迭代器
B:普通for
C:增强for
Set:
Set集合的特点
Set:元素唯一,存储元素无序
一个不包含重复元素的 collection
HashSet:
它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变
HashSet保证元素唯一性的原理?
通过查看add方法的源码,我们知道了添加功能的执行过程中,是进行了数据的判断的。
这个判断的流程是:
首先比较对象的哈希值是否相同,这个哈希值是根据对象的hashCode()计算出来的。
如果哈希值不同,就直接添加到集合中
如果哈希值相同,继续执行equals()进行比较,
返回的是true,说明元素重复,不添加。
返回的是false,说明元素不重复,就添加。
如果我们使用HashSet集合存储对象,你要想保证元素的唯一性,就必须重写hashCode()和equals()方法。
Map集合:
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
通过HashMap创建对象。
Map的成员方法:
V put(K key,V value):添加元素
V remove(Object key):根据键删除键值对元素
void clear():移除所有的键值对元素
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
int size():返回集合中的键值对的对数
Map集合中的实现类的数据结构只针对键有效。
Map集合的获取功能测试
V get(Object key):根据键获取值
Set<K> keySet():获取所有键的集合
Set<Map.Entry<K,V>> entrySet()获取所有的键值对对象
Collection<V> values():获取所有值的集合
|