Collection的功能方法

一.API图示 二.常用方法 0.构造函数 // Collection c = new Collect…

一.API图示

二.常用方法

0.构造函数

// Collection c = new Collection(); //错误,因为接口不能实例化

Collection c = new ArrayList();//ArrayListCollection下的一个子类

1.添加功能

boolean add(Object obj)

添加一个元素

boolean addAll(Collection c)

添加一个集合的元素

示例1

Collection c = new ArrayList();

System.out.println("add:"+c.add("hello"));//true,add这个方法永远返回true

示例2:添加一个集合

// 创建集合1

Collection c1 = new ArrayList();

c1.add("abc1");

c1.add("abc2");

// 创建集合2

Collection c2 = new ArrayList();

c2.add("abc1");

c2.add("abc2");

// boolean addAll(Collection c):添加一个集合的元素

System.out.println("addAll:" + c1.addAll(c2));//c2内的所有元素添加到c1里面

2:删除功能

void clear()

移除所有元素

boolean remove(Object o)

移除一个元素

boolean removeAll(Collection c)

移除一个集合的元素(是一个还是所有)

示例1:

System.out.println("remove:" + c.remove("hello"));

示例2:移除一个集合

//只要有一个元素被移除了,就返回true

System.out.println("removeAll:"+c1.removeAll(c2));

3:判断功能

boolean contains(Object o)

判断集合中是否包含指定的元素

boolean containsAll(Collection c)

判断集合中是否包含指定的集合元素(是一个还是所有)

boolean isEmpty()

判断集合是否为空

示例1:

示例2:

//只有包含所有的元素,才叫包含

System.out.println("containsAll:"+c1.containsAll(c2));

4:获取功能:迭代器的详细使用方法:迭代器(Iterator)

Iterator<E> iterator()(重点)

(1)在迭代器下的专用方法:

1)Object next():获取元素,并移动到下一个位置。

2)boolean hasNext():如果仍有元素可以迭代,则返回 true

(2)可能出现的异常

NoSuchElementException:没有这样的元素,因为你已经找到最后了。

5:长度功能

int size()

元素的个数

6:交集功能

boolean retainAll(Collection c)

两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢?

示例:

//假设有两个集合AB

//AB做交集,最终的结果保存在A中,B不变。

//返回值表示的是A是否发生过改变。

System.out.println("retainAll:"+c1.retainAll(c2));

7:把集合转换为数组

Object[] toArray()

三.迭代器(Iterator)

1.以图会友

2.集合的普通遍历

/**

* 集合的遍历。其实就是依次获取集合中的每一个元素。

* Object[] toArray():把集合转成数组,可以实现集合的遍历

*/

public class CollectionDemo3 {

public static void main(String[] args) {

// 创建集合对象

Collection c = new ArrayList();

// 添加元素

c.add("hello"); // Object obj = "hello"; 向上转型

// Object[] toArray():把集合转成数组,可以实现集合的遍历

Object[] objs = c.toArray();

for (int x = 0; x < objs.length; x++) {

// 我知道元素是字符串,我在获取到元素的的同时,还想知道元素的长度。

// System.out.println(objs[x] + "—" + objs[x].length());

// 上面的实现不了,原因是Object中没有length()方法

// 我们要想使用字符串的方法,就必须把元素还原成字符串

// 向下转型

String s = (String) objs[x];

System.out.println(s + "—" + s.length());

}

}

}

3.升级–迭代器遍历

//Iterator iterator():迭代器,集合的专用遍历方式

public class IteratorDemo {

public static void main(String[] args) {

// 创建集合对象

Collection c = new ArrayList();

// 创建并添加元素

c.add("hello");

Iterator it = c.iterator(); // iterator()实际返回的肯定是子类对象,这里是多态

// 判断是否有下一个元素,有就获取,没有就不搭理它

while (it.hasNext()) {

// System.out.println(it.next());第一种方式

String s = (String) it.next();//第二种,将it强转为String输出

System.out.println(s);

}

}

}

四.遍历练习

/**

* 问题1:能用while循环写这个程序,我能不能用for循环呢?

* 问题2:不要多次使用it.next()方法,因为每次使用都是访问一个对象。

*/

public class IteratorTest2 {

public static void main(String[] args) {

// 创建集合对象

Collection c = new ArrayList();

// 创建学生对象

Student s1 = new Student("林青霞", 27);

Student s2 = new Student("风清扬", 30);

// 把学生添加到集合中

c.add(s1);

c.add(s2);

// 遍历

Iterator it = c.iterator();

while (it.hasNext()) {

Student s = (Student) it.next();

System.out.println(s.getName() + "—" + s.getAge());

// NoSuchElementException 不要多次使用it.next()方法,因为在一条语句中多次使用next()方法,每一次调用都会跳转到下个元素

// System.out.println(((Student) it.next()).getName() + "—" + ((Student) it.next()).getAge());

}

// for循环改写,这样做效率高,因为将it定义在了for里面,循环结束后,变量立刻销毁

// for(Iterator it = c.iterator();it.hasNext();){

// Student s = (Student) it.next();

// System.out.println(s.getName() + "—" + s.getAge());

// }

}

}

//上例使用到的Students

public class Student {

private String name;

private int age;

public Student() {

super();

}

public Student(String name, int age) {

super();

this.name = name;

this.age = age;

}

//get,set略

@Override

public String toString() {

return "Student [name=" + name + ", age=" + age + "]";

}

}

相关面试题:

1.数组有没有length()方法呢?字符串有没有length()方法呢?集合有没有length()方法呢?

2.Collection和Collections的区别?

Collection:是单列集合的顶层接口,有子接口List和Set;

Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方;

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/3677.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部