集合
概述:
- 为什么会出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式
- 数组和集合类都是容器,有何不同?
数组中虽然可以存储对象,但是长度是固定的;集合长度是可变的
数组中可以存储基本数据类型,集合只能存储对象
- 集合类的特点
集合只能用于存储对象,集合的长度是可变的,集合可以存储不同类型的对象
体系:
作为容器中数据结构不同,容器有很多中,不断地共性功能抽取,形成了集合体系,集合框架的顶层就称为Collection接口
Collection接口中定义了集合的基本功能
Collection表示一组对象
Map表示一组映射关系或键值对
Collection中的共性方法
添加:
boolean add(object obj):一次添加一个
Void add (int index,E element):在列表中指定位置插入指定元素
boolean addAll(Collection c):将指定容器中所有元素添加
addall(collection c):把集合中的每一个元素添加到另一个集合中去
删除:
void clear():从列表中删除所有元素
boolean remove(object obj):从列表中删除指定元素的第一个出现(如果存在)
E remove(int index):删除列表中指定位置的元素
ArrayList集合:
泛型概念:
ArrayList<数据类型的包装类>集合名=new ArrayList();
ArrayList<E>:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型
举例:
1、ArrayList<String>:此集合只能操作字符串类型的元素
2、ArrayList<Integer>:此集合只能操作整数类型的元素
ArrayList常用API:
public E get(int index):返回指定索引处的元素
public int size():返回集合中的元素的个数
public E remove(int index):删除列表中指定位置的元素
public boolean remove(objcet o):删除指定的元素,返回是否成功
Set集合:
HashSet:
所存储的元素是不可重复的,并且元素都是无序的
HashSet是根据哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。
LinkedHashSet:
HashSet是链表和哈希组合的一个数据存储结构
TreeSet:
有定制排序和自然排序两种排序
定制排序:
实现类需要重写compare方法:
public int compare(String o1, String o2):比较其两个参数的顺序。
两个对象比较的结果有三种:大于,等于,小于。
如果要按照升序排序:
则o1 小于o2,返回(负数);相等返回0;01大于02返回(正数)
如果要按照降序排序:
则o1 小于o2返回(正数);相等返回0;01大于02返回(负数)
自然排序:Comparable
Map:
一一对应的关系我们称为映射
Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
Collection中的集合称为单列集合,Map中的集合称为双列集合。
需要注意的是,Map中的集合不能包含重复的键,值可以重复(这个值可以是单个也可以是数组或集合);每个键只能对应一个值。
Map常用子类
HashMap、LinkedHashMap
HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
Map接口中的常用方法:
public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。
public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
boolean containsKey(Object key) 判断集合中是否包含指定的键。
public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。
public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。