第12章 集合类

概述

集合可以看作一个容器;集合中的每个对象,可以很容易取出存放,还可以按照一定的顺序摆放

提到容器,不难想到数组,集合类和数组的不同之处是,数组的长度是固定的集合的长度是可变

,数组用来存放基本类型,数据集合用来存放对象的引用

关于集合类的继承关系如下图


collection接口

collection接口是层次结构中的根接口,构成collection的单位称为元素,collection接口通常不能直

接使用,但该接口提供了添加元素,删除元素,管理数据的方法,由于list接口和set接口都继承了

collection接口,因此这些方法对list集合和set集合是通用的 

常用方法如下

collection接口的常用方法
方法功能
add(E e)将指定的对象添加到该集合中
remove(Object o)将指定的对象从该集合中移除
isEmpty()返回 boolean 值,用于判断当前集合是否为空
iterator()返回在此 Collection 的元素上进行迭代的迭代器。用于遍历集合中的对象
size()返回 int 型值,获取该集合中元素的个数

遍历集合中的元素,通过迭代器(Iterator)实现

例题1

package yi;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Shnagpin {

	public static void main(String[] args) {
		Collection<String>list=new ArrayList<>();
		list.add("《Java从入门到精通》");
		list.add("《零基础学Java》");
		list.add("《java精彩编程200例》");
		Iterator<String>it=list.iterator();//创建迭代器
		while(it.hasNext()) {//判断是否有下一个元素
			System.out.println(it.next());
			
		}
	}

}

List集合

List接口

list接口继承了collection因此包含collection接口中的所有方法。此外,它本身还定义了两个非常重要的方法

get():获得指定索引位置的元素

set():将集合中指定索引位置的对象修改为指定的对象

List接口的实现类

ArrayList:实现了可变的数组,允许保存所有元素,包括空元素;

                可以根据索引位置进行快速的查找

                缺点是向指定的索引位置插入对象或删除对象的速度较慢

LinkedList:采用链表结构保存对象;

                这种结构的优点是便于向集合中插入和删除对象

                但是使用查找的话会较慢

声明如下

List<E>list=new ArrayList<>();

List<E>list=new LinkedList<>();

E是合法的Java数据类型

常用方法

add:添加元素

size:获取长度

remove:删除元素

get:获得元素

例题2

更改代码

通过代码我们可以知道,数组下标越界在集合中也适用

除了用for循环的遍历集合,我们还可以使用foreach循环遍历集合,会更加简单简洁

foreach循环语法如下

 还可以使用迭代器遍历集合

也和简洁,根据自己需要选择

set集合

Set集合中的对象不按特定的方式排序,不能包含重复对象

Set构造有一个约束条件,传入的collection,必须小心操作可变对象

Set接口常用的实现类有HashSet和TreeSet

HashSet:由哈希表支持(实际上是一个HashSet实例),不保证迭代顺序,不保证该顺序永恒不变,允许使用null元素。

TreeSet:实现java.util.SortedSet接口,因此TreeSet类实现Set集合时可以按照自然顺序(升序)排序,也可以按照比较器的递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序

TreeSet类增加的方法
方法功能
first()返回此Set集合中当前第一个(最低)元素
last()返回此Set集合中当前最后一个(最高)元素
comparator()返回对此Set集合中的元素进行排序的比较器。如果此Set集合使用自然顺序,则返回null
headSet(E toElement)返回一个新的Set集合,新集合是toElement对象(不包含)之前的所以对象
subSet(E fromElement,E fromElement)返回一个新的Set集合,是fromElement对象(包含)与fromElement(不包含)之间的所有对象
tailSet(E fromElement)返回一个新的Set集合,新集合包含fromElement对象(包含)之后的所有对象

例题3

我们可以发现使用TreeSet类是可以实现自然排序(升序),也就是从小到大排序。不会管你添加元素的顺序。

如果我们使用HashSet类进行排序,会怎么样呢?

我们可以看到使用HashSet类就好像没有顺序,其实是HashSet类是按照哈希表排列的

Map集合

map没有继承Collection接口,提供key到value的映射,不能包含相同的key,key还决定了映射的存储位置,是由一种“散列技术”进行的

map接口

提供了key映射到值的对象,一个映射不能包含重复的key,每个key最多只能映射到一个值

map接口中除集合常用方法外的特殊方法
方法功能
put(K key,V value)向集合添加指定key与value的映射关系
containsKey(Object key)如果此映射包含指定key的映射关系,则返回true
containsValue(Object value)如果此映射将一个或多个key映射到指定值,则返回true
get(Object key)如果存在指定的key对象,则返回该对象对应的值,,则返回null
keySet()返回该集合中的所有key对象形成的Set集合
value()返回该集合中所有值对象形成的collection集合

Map接口的实现类

HashSet:基于哈希表的Map接口的实现,允许使用null值和null键,但必须保证键的唯一性

                不保证映射顺序,不保证该顺序恒久不变

TreeSet :集合中的映射关系有一定的顺序,但在添加、输出、定位映射关系时。TreeMap比HashMap类性能要差,因为是按一定顺序排序的,所以不允许使用null

建议使用HashMap类实现Map集合,因为它在添加和删除映射关系时效率更高

可以通过HashMap类创建Map集合,当需要顺序输出的时候,在创建一个完成相同映射关系的TreeMap类实例。

例题4

输出Map集合中的书号(键)和书名(值)

我们一般全部打印都不会这样输出。不够直观,我们可以修改一下代码,使得是我们日常使用的样子

这样的输出直观,也是日常生活中的一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值