什么是集合
集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便.
java集合框架中相关接口
java.util.Collection接口:
java.util.Collection是所有集合的顶级接口.Collection下面有多种实现类,因此我们有更多的数据结构可供选择.
Collection下面有两个常见的子接口:
java.util.List:线性表.是可重复集合,并且有序。
java.util.Set:不可重复的集合,大部分实现类是无序的。
这里可重复指的是集合中的元素是否可以重复,而判定重复元素的标准是依靠元素自身equals比较的结果,为true就认为是重复元素。
package collection;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("one");
c.add("two");
c.add("three");
c.add("four");
c.add("five");
System.out.println(c);
int size = c.size();
System.out.println("size:"+size);
boolean isEmpty = c.isEmpty();
System.out.println("是否为空集:"+isEmpty);
c.clear();
System.out.println(c);
System.out.println("size:"+c.size());//0
System.out.println("是否为空集:"+c.isEmpty());
}
}
集合与元素equals方法相关的方法
package collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
public class CollectionDemo2 {
public static void main(String[] args) {
// Collection c = new ArrayList();
Collection c = new HashSet();
c.add(new Point(1,2));
c.add(new Point(3,4));
c.add(new Point(5,6));
c.add(new Point(7,8));
c.add(new Point(1,2));
System.out.println(c);
Point p = new Point(1,2);
boolean contains = c.contains(p);
System.out.println("包含:"+contains);
c.remove(p);
System.out.println(c);
}
}
集合存放的是元素的引用
集合只能存放引用类型元素,并且存放的是元素的引用。
package com.scy.array;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo3 {
public static void main(String[] args) {
Collection c = new ArrayList();
Point p = new Point(1,2);
c.add(p);
System.out.println("p:"+p);//p:Point [x=1, y=2]
System.out.println("c:"+c);//c:[Point [x=1, y=2]]
p.setX(2);
System.out.println("p:"+p);//p:Point [x=2, y=2]
System.out.println("c:"+c);//c:[Point [x=2, y=2]]
}
}
集合间的操作
集合提供了如取并集,删交集,判断包含子集等操作。
package com.scy.array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
public class CollectionDemo4 {
public static void main(String[] args) {
//Collection c1 = new ArrayList();
Collection c1 = new HashSet();//不可重复元素
c1.add("JAVA");
c1.add("C++");
c1.add("C语言");
c1.add("Python");
System.out.println("c1:"+c1);
Collection c2 = new ArrayList();
c2.add("android");
c2.add("ios");
c2.add("JAVA");
System.out.println("c2:"+c2);
boolean b1 = c1.addAll(c2);
System.out.println(b1);
System.out.println("c1:"+c1);
System.out.println("c2:"+c2);
Collection c3 = new ArrayList();
c3.add("C++");
c3.add("JAVA");
c3.add("Python");
System.out.println("c3:"+c3);
boolean b2 = c1.containsAll(c3);
System.out.println(b2);
c1.removeAll(c3);
System.out.println("c1:"+c1);
System.out.println("c3:"+c3);
}
}
集合的遍历
Collection提供了统一的遍历集合方式:迭代器模式
Iterator iterator()
该方法会获取一个用于遍历当前集合元素的迭代器.
java.util.Iterator接口
迭代器接口,定义了迭代器遍历集合的相关操作。
不同的集合都实现了一个用于遍历自身元素的迭代器实现类,我们无需记住它们的名字,用多态的角度把他们看做为Iterator即可。
迭代器遍历集合遵循的步骤为:问,取,删.其中删除元素不是必要操作
package com.scy.array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorDemo {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("one");
c.add("two");
c.add("three");
c.add("four");
c.add("five");
System.out.println(c);
//获取迭代器
Iterator it = c.iterator();
while(it.hasNext()){
String str = (String)it.next();
System.out.println(str);
}
System.out.println(c);
}
}
迭代器遍历过程中不得通过集合的方法增删元素
package com.scy.array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorDemo2 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("one");
c.add("#");
c.add("two");
c.add("#");
c.add("three");
c.add("#");
c.add("four");
c.add("#");
c.add("five");
System.out.println(c);
//获取迭代器
Iterator it = c.iterator();
//迭代器提供的相关方法:
//boolean hasNext()
while(it.hasNext()){
String str = (String)it.next();
System.out.println(str);
if("#".equals(str)){
// c.remove(str);
it.remove();
}
}
System.out.println(c);
}
}
增强型for循环
JDK5之后推出了一个特性:增强型for循环
- 也称为新循环,使得我们可以使用相同的语法遍历集合或数组
- 语法:
for(元素类型 变量名 : 集合或数组){
循环体
}
package com.scy.array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class NewForDemo {
public static void main(String[] args) {
//创建字符串数组
String[] array = {"one","two","three","four","five"};
//传统的for循环遍历数组
for(int i=0;i
泛型
JDK5之后推出的另一个特性。
泛型也称为参数化类型,允许我们在使用一个类时指定它里面属性的内容,方法参数或返回值类型。
- 泛型被广泛应用于集合中,用来指定集合中的元素类型。
- 支持泛型的类在使用时如果未指定泛型,那么默认就是Object。
package com.scy.array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class NewForDemo {
public static void main(String[] args) {
//创建集合指定泛型为String类型
Collection coll = new ArrayList();
//给集合添加元素
coll.add("one");//编译器会检查add方法的实际参数是否为String类型。
coll.add("two");
coll.add("three");
coll.add("four");
coll.add("five");
//coll.add(123);//编译不通过 类型不符
//迭代器遍历
//迭代器也支持泛型,指定的与遍历的集合指定的泛型一致即可。
Iterator iterator = coll.iterator();
while(iterator.hasNext()) {
//编译器在编译代码时会根据迭代器指定的泛型补充造型代码
String str = iterator.next();//获取元素是无需在强制类型转换
System.out.println(str);
}
System.out.println("=====5 end=========");
//新循环的快捷键 输入 fore alt + / 回车即可 会自动遍历最靠近当前代码的集合
for (String string : coll) {
System.out.println(string);
}
}
}



