5 Collection集合
5.1 Collection集合概述
- 是单列集合的顶层接口,它表示一组对象,这些对象也称Collection元素
- JDK不提供此接口的直接实现,它提供更具体的子接口(Set 和 List)实现
package ceshi;
import java.util.AbstractCollection;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo {
public static void main(String[] args) {
//创建Collection集合对象
Collection<String> c = new ArrayList<String>();
//添加元素
c.add("hello");
c.add("world");
c.add("java");
System.out.println(c); //[hello, world, java]
}
}
5.2 Collection集合常用方法(查看所有源码快捷键)
方法名 | 说明 |
---|---|
public boolean add(E e) | 把给定的元素添加到当前集合中 |
public boolean remove(E e) | 把给定的对象在当前集合中删除 |
public void clear() | 清空集合中所有的元素 |
public boolean contains(Object obj) [kənˈteɪnz] 包括 | 判断当前集合中是否存在指定的对象 |
public boolean isEmpty() [ˈenpti] | 判断当前集合是否为空 |
public int size() | 返回集合中元素的个数 |
public Object[] toArray( ) | 把集合中的元素,储存到数组中 |
- 快捷键:Alt+7 打开源码中所有方法
package ceshi;
import java.util.AbstractCollection;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo {
public static void main(String[] args) {
//创建Collection集合对象
Collection<String> c = new ArrayList<String>();
//1、public boolean add(E e) 把给定的元素添加到当前集合中
c.add("hello");
c.add("hello");
System.out.println(c); //[hello, hello] ;ArrayList可以存储重复元素
//2、public boolean remove(E e) 把给定的对象在当前集合中删除
/*System.out.println(c.remove("hello")); //true
System.out.println(c.remove("java")); //false
System.out.println(c); //[hello]*/
//3、public void clear() 清空集合中所有的元素
/*c.clear();
System.out.println(c); //[]*/
//4、public boolean contains(Object obj) 判断当前集合中是否存在指定的对象
/*System.out.println(c.contains("java")); //false
System.out.println(c.contains("hello")); //true*/
//5、public boolean isEmpty() 判断当前集合是否为空
// System.out.println(c.isEmpty()); //false
//6、public int size() 返回集合中元素的个数
// System.out.println(c.size()); //2
//7、public Object[] toArray( 把集合中的元素,储存到数组中
Object[] arr = c.toArray();
for(int i= 0;i< arr.length;i++) {
System.out.print(arr[i]+","); //hello,hello
}
}
}
5.3 Collection集合的遍历
- Collection 集合遍历有三种方法:
- 迭代器
- foreach(增强for循环)
- DK 1.8 开始的新技术 Lambda 表达式(了解)
5.3.1 Iterator['lɪtəreɪtə]迭代器遍历集合
- lterator:迭代器,集合的专用遍历方式
Iterator<E> iterator()
:返回此集合中元素的迭代器,通过集合的iterator()
方法得到- 迭代器是通过集合的**iterator()**方法得到的,所以我们说它是依赖于集合而存在的
- Iterator中的常用方法
方法名 | 说明 |
---|---|
E next() | 获取迭代中的下一个元素 |
boolean hasNext() | 如果迭代具有更多元素,则返回true |
package ceshi;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorDemo {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
c.add("java");
c.add("天下");
c.add("无敌");
//Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator0方法得到
Iterator<String> it = c.iterator(); //c.iterator();按下Ctrl+alt+v
/*public Iterator<E> iterator() {
return new ArrayList.Itr(); //返回的是实现类的对象
}
private class Itr implements Iterator<E> {...}
*/
//E next()
/*System.out.println(it.next()); //java
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next()); //NoSuchElementException:表示请求的元素不存在*/
//boolean hasNext() 如果迭代具有更多元素,则返回true
/*if(it.hasNext()) {
System.out.println(it.next()); //java
}
if(it.hasNext()) {
System.out.println(it.next()); //天下
}
if(it.hasNext()) {
System.out.println(it.next()); //无敌
}
if(it.hasNext()) {
System.out.println(it.next()); //无输出
} */
//while循环改良
while(it.hasNext()) {
String s = it.next();
System.out.println(s); //java
//天下
//无敌
}
}
}
- 案例
package ceshi;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo {
public static void main(String[] args) {
//2、创建Collection集合对象
Collection<Student> c = new ArrayList<Student>();
//3、创建学生对象
Student s1 = new Student("y1", 10);
Student s2 = new Student("y2", 20);
Student s3 = new Student("y3", 30);
//4、把学生添加到集合
c.add(s1);
c.add(s2);
c.add(s3);
//5、遍历集合
Iterator<Student> it = c.iterator(); //必须集合添加完毕后创建迭代器对象
while (it.hasNext()) {
Student s = it.next();
System.out.println(s.getName() + "," + s.getAge());
/*
y1,10
y2,20
y3,30
*/
}
}
}
5.4 Collections工具类
- 包:
java.util.Collections
- Collections 并不属于集合,而是用来操作集合的工具类
- 常用方法(全是静态修饰,用类名调用)
方法名 | 说明 |
---|---|
public static <T extends Comparable<?super T>> void sort(List list) | 将指定的列表按升序排序 |
public static void reverse(List<?> list) | 反转指定列表中元素顺序 |
public static void shuffle(List<?> list) | 使用默认的随机源随机排序指定的列表 |
package ceshi;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MapDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
System.out.println(list); //[30, 20, 50, 10, 40]
//1,public static <T extends Comparable<?super T>> void sort(List list) 将指定的列表按升序排序
/*Collections.sort(list);
System.out.println(list); //[10, 20, 30, 40, 50]*/
//2,public static void reverse(List<?> list) 反转指定列表中元素顺序
/*Collections.reverse(list);
System.out.println(list); //[40, 10, 50, 20, 30]*/
//3,public static void shuffle(List<?> list) 使用默认的随机源随机排序指定的列表
Collections.shuffle(list);
System.out.println(list);
//第一次运行[10, 40, 30, 50, 20]
//第二次运行[10, 30, 20, 50, 40]
}
}