集合类
java集合包括List、Set、Queue、Map,其中Lis/Set/Queue均继承自Collection,这些均是接口,实际使用时,创建对象需要通过他们的实现类来进行。
- Collection:一个独立元素的序列,这些元素都服从一条或者多条规则
- List:必须按照插入顺序保存元素
- Queue:按照排队规则来确定对象产生顺序(通常与插入顺序相同)
- Set:不能有重复元素
- Map:一组成对的键值对对象,允许使用键来查找值
![](https://i-blog.csdnimg.cn/blog_migrate/c8dd03a69fff4a5419d7c4e9b0c63a9e.png)
List接口
List的实现类包括ArrayList和LinkedList,均是按照插入顺序保存元素,常用的类时ArrayList.
- ArrayList:优于随机访问元素,但在List中插入、移除元素较慢,并且可以实现自动扩容;
- LinkedList:优于在List中间的插入、删除操作,有优化的顺序访问
\\创建集合对象
List list = new ArrayList();
\\元素对象
String str = "学生1";
\\添加元素
list.add(str);
ArrayList常用方法:
序号 | 返回值 | 方法 | 说明 | 表达式 |
---|---|---|---|---|
1 | boolean | add(E a) | 将指定的元素追加到此列表的末尾 | list.add(x) |
2 | boolean | contains(Object o) | 确定某个对象是否包含在列表中 | list.contains(x) |
3 | E | get(int index) | 获取指定位置处的元素 | list.get(x) |
4 | int | indexOf(Object o) | 返回列表中第一次出现指定元素的位置编号,没有则返回-1 | list.indexOf(E) |
5 | boolean | isEmpty() | 判断列表是否包含元素 | list.isEmpty() |
6 | E | remove(int index) | 移除指定位置的元素 | list.remove(x) |
7 | boolean | retainAll(Collection c) | 保留此列表中包含在指定集合中的元素。 | list.retainAll© |
8 | int | size() | 返回列表的尺寸(元素的个数) | list.size() |
9 | List | subList(int x, int y) | 返回列表的子序列,从x到y的位置 | list.subList(x,y) |
10 | void | clear() | 清空列表 | list.clear() |
11 | T[] | toArray(T[] a) | 将列表中元素按数组返回 | list.toArray(int[] a) |
Set接口
Set接口中保存元素不能重复,常用的类型HashSet
- HashSet:存储的顺序没有实际意义;
- TreeSet:按照比较结果升序保存对象;
- LinkedHashed:按照添加顺序保存对象;
//创建Set对象
Set<T> set = new HashSet<>(); // <T> 表示泛型 , Set为接口,创建对象只能创建其实现类的对象
//向Set中添加元素
set.add(Object x );
/*
Set集合具有唯一性,是依赖于equals和hashCode方法实现的,因此尤其在存储自定义的类型数据时,该类需要重写这两个方法,否则默认调用Object的方法,由于引用数据类型地址不同的原因,导致内容相同的数据依然被保存
*/
Map接口
Map接口属于双列集合,内部存储的是一个键值对(键值key不可以重复),具有映射关系,可以通过键-值映射关系方便的查找值;
//创建对象
Map<T1 , T2> map = new HashMap<>(); //T1表示键的数据类型 T2 表示值的数据类型
/*添加元素(键值对)
如果元素是第一次添加,则返回null
如果k键位置已经有值,则用新值覆盖旧值,并将旧值返回;
*/
map.put(K key , V value);
//获取键对应的值
map.get(K key);
//获取所有键的集合
Set<K> keys = map.keySet();