欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

大数据Java基础DAY16——集合(Collection,Iterator接口)

时间:2023-06-21

目录

集合类概述

Collection接口

Collection接口概述

Collection接口成员方法

1.添加功能

2.删除功能

3.判断功能

4.获取长度

5.求交集功能

6.集合的遍历

Iterator接口

Iterator接口概述

Iterator接口成员方法


集合类概述

a.为什么出现集合类?

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

b.数组和集合类同是容器,有何不同?

数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。

c.集合类的特点

集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

Collection接口

Collection接口概述

Collection 层次结构中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。

Collection接口成员方法

(由于Collection是一个接口,所以无法被实例化,需要它的子类来进行接口多态的方式实例化,这里暂时用ArrayList来示范。)

1.添加功能

boolean add(E e)   确保此集合包含指定的元素(可选操作)

import java.util.ArrayList;import java.util.Collection;public class CollectionTest1 { public static void main(String[] args) { Collection c = new ArrayList(); //boolean add(E e)确保此集合包含指定的元素(可选操作) System.out.println(c.add(12)); //输出true,表示该元素成功插入到对象c里 System.out.println(c.add("help")); c.add(2.33); c.add(12); System.out.println(c); //调用AbstractCollection类中的toString()方法,所以不会输出地址值 }}

 boolean addAll(Collection c)   将指定集合中的所有元素添加到此集合(可选操作)

//创建集合对象 Collection c1 = new ArrayList(); //向集合中添加元素 c1.add("java"); c1.add("hadoop"); c1.add("hive"); c1.add("spark"); //创建另一个集合对象 Collection c2 =new ArrayList (); c2.add("hello"); c2.add("java"); //boolean addAll(Collection c) 将指定集合中的所有元素添加到此集合(可选操作) c1.addAll(c2); //将c2集合中的元素添加到c1里 System.out.println(c1); System.out.println(c2);

2.删除功能

boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)(可选操作)

//boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)(可选操作) c.add(121); c.add("eee"); c.add("hello"); c.add("bigdata"); System.out.println(c); c.remove("hello");//删除指定元素(如果有重复只移除一个符合条件的元素) System.out.println(c);

boolean removeAll(Collection c)  删除指定集合中所包含的所有此集合的元素(可选操作)

//创建集合对象 Collection c1 = new ArrayList(); //向集合中添加元素 c1.add("java"); c1.add("hadoop"); c1.add("hive"); c1.add("spark"); //创建另一个集合对象 Collection c2 =new ArrayList (); c2.add("hello"); c2.add("java"); //boolean removeAll(Collection c) 删除指定集合中所包含的所有此集合的元素(可选操作) c1.removeAll(c2); //将c1集合里包含c2集合的元素删除 System.out.println(c1); System.out.println(c2);

void clear()  从此集合中删除所有元素(可选操作)

//void clear() 从此集合中删除所有元素(可选操作) c.add(121); c.add("eee"); System.out.println(c); c.clear(); //删除 System.out.println(c);

3.判断功能

boolean contains(Object o)  如果此集合包含指定的元素,则返回true

c.add(121); c.add("eee"); c.add("hello"); c.add("bigdata"); System.out.println(c.contains("hello")); //包含就输出true,否则false

boolean containsAll(Collection c)  如果此集合中包含指定集合中的所有元素,则返回true

//创建集合对象 Collection c1 = new ArrayList(); //向集合中添加元素 c1.add("java"); c1.add("hadoop"); c1.add("hello"); //创建另一个集合对象 Collection c2 =new ArrayList (); c2.add("hello"); c2.add("java"); System.out.println(c1.containsAll(c2)); //包含返回true,否则false

boolean isEmpty()   如果此集合不包含元素,则返回true

//boolean isEmpty() 如果此集合不包含元素,则返回true c.add(121); c.add("eee"); c.add("hello"); c.add("bigdata"); System.out.println(c.isEmpty()); //空输出true,非空false

4.获取长度

int size()  返回此集合中的元素数

//int size() 返回此集合中的元素数 c.add(121); c.add("eee"); c.add("hello"); c.add("bigdata"); System.out.println(c.size()); //这里有四个元素,输出为4

5.求交集功能

boolean retainAll(Collection c)  仅保留此集合中包含在指定集合中的元素(可选操作)

//创建集合对象 Collection c1 = new ArrayList(); //向集合中添加元素 c1.add("java"); c1.add("hadoop"); c1.add("hello"); //创建另一个集合对象 Collection c2 =new ArrayList (); c2.add("hello"); c2.add("java"); //boolean retainAll(Collection c) 仅保留此集合中包含在指定集合中的元素(可选操作) c1.retainAll(c2); //c1保留与c2集合相交部分元素 System.out.println(c1); System.out.println(c2);


 

6.集合的遍历

 Object[] toArray()   返回一个包含此集合中所有元素的的数组  

  把集合转成数组,可以实现集合的遍历

//创建集合对象 Collection c = new ArrayList(); //添加元素 c.add("ee"); c.add("sds"); c.add("rrr"); c.add("tet"); //集合转换为数组 Object[] objects = c.toArray(); //遍历数组 for(int i=0;i

 例:用集合遍历学生信息

a.首先创建学生的标准类(不会的可以去看看前面  面向对象——封装 )

class Student{ private String name; private int age; public Student() {} public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + ''' + ", age=" + age + '}'; }}

b.然后创建集合遍历

public class CollectionTest3 { public static void main(String[] args) { //创建集合对象 Collection c =new ArrayList(); //创建学生对象 Student s1 =new Student("qwee",20); Student s2 =new Student("sdfs",30); Student s3 =new Student("adasfa",40); //将对象添加进入集合 c.add(s1); c.add(s2); c.add(s3); //转换为数组 Object[] objects = c.toArray(); //遍历数组 for(int i=0;i< objects.length;i++){ // System.out.println(objects[i]); 普通输出 Student student = (Student) objects[i]; //向下转型 System.out.println(student.getName()+"————"+student.getAge()); } }}

c.结果

Iterator接口

Iterator接口概述

           对 collection 进行迭代的迭代器

           依赖于集合而存在

Iterator接口成员方法

 a.  Iterator iterator()返回此集合中的迭代器  (它是Collection集合遍历的专有方式)

 b.  E next()     返回迭代中的下一个元素

例:迭代器遍历字符串

import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class CollectionTest4 { public static void main(String[] args) { //创建集合对象 Collection c =new ArrayList(); //添加元素 c.add("hadoop"); c.add("hive"); c.add("java"); c.add("bigdata"); //获取集合c的迭代器对象 //Iterator iterator() 返回此集合中的元素的迭代器 Iterator iterator = c.iterator(); //System.out.println(iterator);//不能直接输出,iterator的实现类中没有toString方法,输出是地址值 //E next() 返回迭代中的下一个元素 Object next = iterator.next(); System.out.println(next); //输出 hadoop System.out.println(iterator.next()); //输出hadoop下一个元素hive,以此类推,超出集合元素数量会报错 System.out.println(iterator.next()); System.out.println(iterator.next()); }}

c.   boolean hasNext()  如果迭代中还有元素,返回true(判断迭代中海有没有元素)

用上面的 E next() 方法多调用一次超过集合拥有元素数量就会报错,所以可以用hasnext()改进。

//boolean hasNext() 判断迭代中还有没有元素 if (iterator.hasNext()){ System.out.println(next); //如果这样输出,每验证一次需重新输出,如果元素过多太繁琐,需改进 } //由于不知道需要循环输出多少次,用while循环改进 while(iterator.hasNext()){ System.out.println(iterator.next()); }

遍历结果

 若想继续使用元素的方法(如查看长度)需向下转型

while(iterator.hasNext()){ Object next = iterator.next(); //向下转型,添加的数据都是String类型的,所以转String类 String s =(String) next; System.out.println(s+" 长度:"+s.length()); }

 同样,我们继续利用迭代器来遍历自定义的对象(学生类同上,需先创建公共类)

import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class CollectionTest5 { public static void main(String[] args) { //创建集合对象 Collection c= new ArrayList(); //创建学生对象 Student s1 =new Student("w3da3",24); Student s2 =new Student("q32423",23); Student s3 =new Student("sdf313",34); //添加到集合 c.add(s1); c.add(s2); c.add(s3); //获取迭代器对象 Iterator iterator = c.iterator(); //遍历迭代器对象,获取每一个元素 while(iterator.hasNext()){ Object next = iterator.next(); //向下转型,这里是Student类,所以转Student类 Student s =(Student) next; //转型后就能调用元素的方法了 System.out.println(s.getName()+"_____"+s.getAge()); } }}

( 不推荐用for循环,如果你非要使用for循环,也能使用for循环遍历,没有while循环可读性高)

for (Iterator iterator1 = c.iterator();iterator1.hasNext();){ Object next = iterator1.next(); Student s =(Student) next; System.out.println(s.getName()+"_____"+s.getAge()); }

注意,同一个迭代器只能遍历一次,多次遍历没有效果。应为遍历一次指针指向末尾(如while循环后,再使用while循环无第二次输出结果,只有第一次结果)

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。