Java学习笔记之集合类 (一) 集合框架概述

集合类是Java中很重要的一个知识点,它是一个容器,可以存储各种引用数据类型的对象。那么同样是容器的数组,跟集合类比较起来有什么区别呢?首先,数组一旦创建,长度也就确定了。而往集合类里面添加对象,那么集合类的容量是可变的;再者,数组可以存储基本数据类型,而集合类只能存对象;最后,集合类可以存储不同类型的对象,而数组只能存相同类型的。

集合类的框架是很庞大的,不过其中有很多类是用于特定的场合的(很少用到),我们经常使用的集合类体系如下图:
在这里插入图片描述
可以看到它的体系还是很庞大的。在Collection的这些实现类中,每一种集合类内部都有其自己存放对象的规则。学习一个庞大的体系的要点就是学顶层,用底层。在图片中可以看到,Collection是所有集合类的一个顶层接口,所以它的里面已经定义了一些集合类共有的方法:

  1. 添加
    boolean add(E e)
    boolean addAll(Collection<? extends E> c)

  2. 删除
    boolean remove(Object o)
    boolean removeAll(Collection<?> c)
    void clear() //全部清除

  3. 判断
    boolean contains(Object o) //如果此 collection 包含指定的元素,则返回 true
    boolean containsAll(Collection<?> c) //如果此 collection 包含指定 collection 中的所有元素,则返回 true

  4. 获取
    int size() //返回此 collection 中的元素数
    Iterator iterator() //返回在此 collection 的元素上进行迭代的迭代器

  5. 其他
    boolean retainAll(Collection<?> c) //取交集
    Object[] toArray() //返回包含此 collection 中所有元素的数组

这里面值得一提的是iterator方法,它返回的是一个迭代器对象。迭代器的作用是取出容器中的对象,其使用方法如下(例子里面使用的实现类是ArrayList):

Collection<String> coll = new ArrayList<>();		
		coll.add("hahaha");
		coll.add("hehehe");
		coll.add("xixixi");
		
		//方法1
        /*Iterator<String> it = al.iterator();
		while(it.hasNext()) {
			String str = it.next();
			System.out.println(str);
		}*/
		
		//方法2
		for(Iterator<String> it = al.iterator(); it.hasNext(); ) {
			String str = it.next();
			System.out.println(str);
		}

可以看到有两种方法取出容器中的对象,方法2的好处就是for循环结束之后,迭代器对象it内存就会马上被释放,所以在开发中建议使用这种方法。

上面提到过,每一种容器存放对象的规则都是不同的,所以从容器中取对象也要根据不同的容器使用相应的方法。Iterator接口就是对所有的容器进行元素取出的公共接口,每一个具体的集合类都有一个内部类实现了这个接口,而每个集合类实现了Collection接口定义的iterator方法来获取到这个内部类的对象。对于我们开发者来说,Iterator的具体实现并不重要,只要通过容器获取到实现Iterator接口的对象即可。

猜你喜欢

转载自blog.csdn.net/weixin_44965650/article/details/106982787