Java学习容器初见

小编已经学习了数组的概念,简单说下数组。

作用:数组是一种容器,可以在其中放置一个或一组数据。从而,实现使用数组来管理一 组数据。

优势:是一种简单的线性序列,可以快速的访问数组元素,效率高。如果从效率和类型检查的角度讲,数组是最好的。

劣势:不灵活在容量必须要事先定义好,不能随着需求的变化而扩容。

这样看来,数组局限于确定的容量,但现实需求是不可确定的,需要一个灵活并可以随时扩充的容器来解决需求问题,所以强大的容器(集合框架)就来了!

先来一张容器接口层次结构图:

 一眼看出,左边最上面的接口Collection类,是一个最基础的接口父类,没有存储功能,之规定了容器基础的行为,规范了容器的标准。基础行为如下:

 然后接口List作为Collection的子类接口,此接口的用户对列表中的每个元素进行精确的控制,并使其有序排列,数据可重复。用户能根据元素的索引值来访问元素,并能查找列表中的元素。同样只提供了一些抽象的方法,做出了相应的容器规定。

 同一级别的Set作为Collection的子接口,也提供了一些方法,作出相应规定。可以存放很多数据,但是数据却不能重复。如果重复则覆盖原有的数据。

容器的使用

无论是何种容器使用步骤和方式都类似,首先需要有一个容器对象,然后再通过方法对容器中的数据据进行增、删、改、查操作。各种操作的内部对用户都是透明的,我们只需要通过调用方法即可。

List接口下有两个实现类LinkedList和ArrayList,两个子类实现了List中的所有方法,并都给了存储数据的空间。使用List代码举例:

List<String> list = new LinkedList<>();
list.add("a");
list.add("b");
list.add(1,"good");
list.add(0,"nice");
list.add("hello");
System.out.println(list.size());
list.remove("a");
System.out.println(list.size());
list.set(0,"first");
System.out.println(list.get(0));
list.clear();
System.out.println(list.size());

初步使用过后,我们需要了解如何遍历这些容器,通过for循环有两种方法,普通for循环代码如下:

for (int i=0; i<list.size(); i++){
System.out.println(list.get(i));
}

增强for循环如下:

for (String temp : list) {
System.out.println(temp);
}

底层用双向链表实现的LinkedList。

特点:查询效率低,增删效率高,线程不安全。

底层用数组实现的ArrayList。

特点:查询效率高,增删效率低,线程不安全。

最后一种有点高大上的感觉,通过特有的迭代器Iterator来遍历,所有实现了Collection接口的容器类都有一个 iterator 方法用以返回一个实现了Iterator接口的对象。 Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。

 遍历代码,简单粗暴:

Iterator<String> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}

 所有代码都已经上传,想要学习请自行下载(免费开源0积分)。

总结:容器满足了数组满足不了的需求,平常使用可以解决用户的大部分需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值