Java集合简单介绍
一. 前言1:集合只能存放对象。
重要的话放前面说,也很好理解,比如我们看到的代码里都是这样写的,ArrayList al=new ArrayList();这就说明int类型会自动转换成Intger类再存入集合中。
贴一下参考的链接:https://www.cnblogs.com/lixiansheng/p/11348050.html
二. 前言2:Iterator是Collection系列集合的顶层接口,Collection extends Iterable
Iterator是Collection系列集合的顶层接口,因为Collection源码里第一句话就是(而Iterator和Iterable的联系后面提到):
public interface Collection<E> extends Iterable<E>
三. 为什么需要集合,集合的由来
在常规编程时,我们需要在任何时候,任何地点创建任意数量的对象,而这些对象用什么容纳呢?即集合,即集合使用来存放对象的。(为什么不用数组呢?后面介绍)
四. 集合是什么
Java集合存放在java.util包中,是一个用来存放对象的容器。
注意:
1,集合只能存放对象。比如存入一个int类型的数据放入集合中,其实它是自动转换成Integer类后放入的。
2,集合存放的都是对象的引用,而非对象本身。所有我们称集合中的对象就是集合中对象的引用。对象本身还是放在堆内存中的。
五. Java中的集合有哪些
java中集合类存放于Java.util包中,主要是这3中:set(集),list(列表,包括queue)和map(映射)。
(图中的依赖指的是依赖关系,而非继承啥的,依赖关系:假设A类的变化引起了B类的变化,则说名B类依赖于A类。)
从图中我们可以看出:
1,集合主要分为Collection和Map接口。
2,Collection又分别被List,Set和Queue继承。
3,Iterator是一个用来遍历集合中的元素的接口。除了map系列的集合都是西安了Iterator即可,可以之间调用Iterator的方法,map系列的集合遍历自身时,可以间接调用Iterator()方法。
4,List被AbstractList实现,然后分为3个子类ArrayList,LinedList和Vector。
5,Set被AbstractSet实现,又分为两个子类,HashSet和TreeSet
6,Map被AbstractMap实现,又分为2个子类,HashMap和TreeMap,Map还有个Hashtable子类
7,Map被Hashtable实现
六. 各集合的特点
Java各集合都有不同的特点:
List是非常常用的数据类型,List是有序的Collection
Set体系的集合用于存储无序元素,且值不能重复。
Map系列存储键值对
具体实现类的特点如下图:
七. Iterator迭代器(及Iterator和Iterable的联系)
7.1 Itertor迭代器
Iterator迭代器是Java集合的顶层接口(不包括Mao系列)。Iterator中有3个方法:
1,Object next();返回迭代器刚越过的元素的引用,返回值是Object,需要强制转换为自己需要的类型。
2,boolean hasNext():判断容器内是否还有可供访问的元素。
3,void remov():删除迭代器刚刚越过的元素。
7.2 Itertor和Iterable的联系
在前言里我们也有讲到,Collenction接口继承了Iterable,那么Iterable和Itertor有什么联系和区别呢?
public interface Iterable<T>{
/**
* Returns an iterator over elements of type {@code T}
*
* @return an Iterator
*/
Iterator<T> iterator();
...
}
可以看到,Iterable类里面封装了iterator接口。所以,只要实现了Iterable接口的类,就可以直接使用Iterator迭代器了。
下面看一个使用Iterator迭代器的例子:
import java.util.*;
public class test{
public static void main(String[] args) {
// 产生一个List集合,典型实现为ArrayList。
List<String> list = new ArrayList<String>();
/* List list = new ArrayList();结果出错
注:test.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
*这样的情况下要用泛型,容器里不能放object而是放具体类型。
*/
//添加三个元素
list.add("Tom");
list.add("Bob");
list.add("Jack");
//构造List的迭代器
Iterator it = list.iterator();
//通过迭代器遍历元素
while (it.hasNext()){
Object obj = it.next();
System.out.println(obj);
}
}
}