JavaSE——集合(一)Collection

1.集合框架

  • 集合的由来

Java是面向对象的语言,对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java中就提供了集合类。

  • 数据和集合的区别

(1)数组的长度是固定的,而集合的长度第可变的
(2)数字既可以存储基本数据类型,也可以存储引用数据类型。而集合只能存储引用数据类型。
(3)数组只能存储同种数据类型的元素,而集合可以存储不同数据类型的元素。

  • 集合继承体系图

在这里插入图片描述

2.集合功能描述

a:添加功能
		boolean add(Object obj):添加一个元素
		boolean addAll(Collection c):添加一个集合的元素  (给一个集合添加进另一个集合中的所有元素)
	b:删除功能
		void clear():移除所有元素
		boolean remove(Object o):移除一个元素
		boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合的交集元素 
		如果没有交集元素 则删除失败 返回false
	c:判断功能
		boolean contains(Object o):判断集合中是否包含指定的元素	
		boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的元素才算包含 才返回true)
		比如:1,2,3 containsAll 12=true   1,2,3 containsAll 2,3,4=false
		boolean isEmpty():判断集合是否为空
	d:获取功能
		Iterator<E> iterator()(重点)
		e:长度功能
			int size():元素的个数
			面试题:数组有没有length()方法呢?字符串有没有length()方法呢?集合有没有length()方法呢?
		f:交集功能
			//例如:A集合对B集合取交集,获取到的交集元素在A集合中。返回的布尔值表示的是A集合是否发生变化 
			boolean retainAll(Collection c):获取两个集合的交集元素(交集:两个集合都有的元素)
		g:把集合转换为数组
			Object[] toArray()
  • 案例演示1
package com.westmo.demo8;
import java.util.Collection;
import  java.util.ArrayList;
public class MyDemo1 {
    public static void main(String[] args) {
        Collection collection1 = new ArrayList();
        collection1.add(12);//添加元素到集合collection1中
        collection1.add("qwe");
        System.out.println(collection1);
        Collection collection2 = new ArrayList();
        collection2.add('1');
        collection2.add(1.1);
        collection2.addAll(collection1);//将集合collection1中得所有元素添加到集合collection2中
        System.out.println(collection2);
        collection1.clear();//清除集合中的所有元素
        System.out.println(collection1);
        collection2.remove(1.1);//清除集合中的指定元素
        System.out.println(collection2);
    }
}
  • 案例演示2
package com.westmo.demo8;
import java.util.ArrayList;
import java.util.Collection;
public class MyDemo2 {
    public static void main(String[] args) {
        Collection collection1 = new ArrayList();
        collection1.add(21);
        collection1.add("qw");
        collection1.add(2.2);
        Collection collection2 = new ArrayList();
        collection2.add(21);
        collection2.add(2.2);
        System.out.println(collection1.retainAll(collection2));//获取两个集合中的交集元素
        collection1.removeAll(collection2);//清除集合collection1中与collection2集合中由交集的元素
        System.out.println(collection1);
        System.out.println(collection2);
        System.out.println(collection1.contains("qw"));//判断集合中是否包含指定元素
        System.out.println(collection1.containsAll(collection2));//判断一个集合中是否包含另一个集合中所有元素
    }
}
  • 案例演示(迭代器集合遍历)
package com.westmo.demo8;
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
public class MyDemo3 {
    public static void main(String[] args) {
        Collection arrayList = new ArrayList();
        arrayList.add(1000);
        arrayList.add(2000);
        arrayList.add(3000);
        System.out.println(arrayList.size());//获取集合中元素的个数
        Iterator iterator = arrayList.iterator();//通过迭代器Interator来遍历集合中的元素
        //通过Iterator中的两个方法,hashNext()和next()方法。hashNext()负责判断集合中是否还有元素可以迭代,
        // next()获取元素,并移动到下一个位置
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next);
        }
    }
}
  • 案例演示(把集合转换为数组)
package com.westmo.demo8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
public class MyDemo4 {
    public static void main(String[] args) {
        Collection arrayList = new ArrayList();
        arrayList.add(100);
        arrayList.add(200);
        arrayList.add(150);
        arrayList.add(400);
        Iterator iterator = arrayList.iterator();
       /* Integer[] integers = new Integer[arrayList.size()];
        int i=0;
        while (iterator.hasNext()) {
            Object next = iterator.next();
            integers[i]= (Integer) next;
            i++;
        }
        System.out.println(Arrays.toString(integers));*/
        Object[] objects = arrayList.toArray();//调用toArray()方法直接进行转换
        System.out.println(Arrays.toString(objects));
        for (int i = 0; i < objects.length; i++) {
            Object object = objects[i];
            Integer num= (Integer) object;
            System.out.println(num);
        }
    }
}

3.迭代器原理

  • 迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的(例如ArrayList集合是数组,LinkedList集合是链表),所以每个集合的存和取都是不一样的,那么就需要在每个集合类中定义hashNext()和next()方法,这样做的话就会使整个集合体系过于臃肿,迭代器是将这些方法向上抽取出接口,迭代器中只是声明这些方法,每个集合类定义自己的迭代方法,
  • 优点
    • 规定了整个集合体系的遍历方式都是hashNext()和next()方法
    • 代码由底层内部实现
发布了58 篇原创文章 · 获赞 13 · 访问量 1888

猜你喜欢

转载自blog.csdn.net/weixin_44324174/article/details/104044572