List可重复且有序
Set集合不可重复且无序
集合之间的 *** 作
// 将给定集合中所有元素添加到当前集合中
// addAll( Collection c )
Collection c1 = new ArrayList();
c1.add("java");
c1.add("c++");
c1.add(".net");
c1.add("android");
System.out.println("c1:"+c1);
Collection c2 = new HashSet();
c2.add("android");
c2.add("ios");
System.out.println("c2:"+c2);
c1.addAll(c2); //c1集合为List集合,可以重复且有序
System.out.println(c1);//[c++, java, .net, android, android, ios]
c2.addAll(c1);//c2为Set集合,不可重复且无序
System.out.println(c2);//[c++, java, android, .net, ios]
boolean containsAll(Collection c)
判断当前集合是否包含给定集合中的 所有元素,全部包含才返回true
/**
* boolean containsAll(Collection c)
* 判断当前集合是否包含给定集合中的 所有元素,全部包含才返回true
*/
Collection c3 = new ArrayList();
c3.add("java");
c3.add("ios");
c3.add("php"); //当被包含的集合中有不属于包含集合的元素时,则返回false
boolean contains = c2.containsAll(c3);
System.out.println("包含所有:"+contains);
retainAll(Collection c) 取交集,仅保留当前集合中与给定集合的共有元素
System.out.println("c2"+c2);//[c++, java, android, .net, ios]
System.out.println("c3"+c3);//[java, ios, php]
/**
* 取交集,仅保留当前集合中与给定集合的共有元素
*/
c2.retainAll(c3);
System.out.println("c2"+c2);//[java, ios]
System.out.println("c3"+c3);//[java, ios, php] c3不受影响
removeAll(Collection c) 删交集,将当前集合中与给定集合的共有元素删除
System.out.println("c2"+c2);//[c++, java, android, .net, ios]
System.out.println("c3"+c3);//[java, ios, php]
/*
删交集,将当前集合中与给定集合的共有元素删除
*/
c2.removeAll(c3);
System.out.println("c2"+c2);//[java, android, .net]
System.out.println("c3"+c3);//[java, ios, php]//c3不受影响
集合的遍历 * 集合提供了统一的遍历方式:迭代器模式
/**
* 集合的遍历
* 集合提供了统一的遍历方式:迭代器模式
* 对应的方法:
* Iterator iterator()
* 该方法可以获取一个用于遍历当前集合的迭代器实现类
*
* java.io.Iterator 迭代器接口
* 不同的集合都提供了一个迭代器实现类用于遍历当前集合元素。迭代器接口上规定了遍历集合的
* * 相关方法,使用迭代器遍历集合的步骤遵循:问->取->删的步骤进行。其中删除不是必要 *** 作。
*
* 因为Set集合无序,所以没有下标的概念,等等因素,不能用for()循环遍历
* List集合可以用for()循环遍历
*/
public class IteratorDemo {
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();
while(it.hasNext()){
String o = (String)it.next();
System.out.println(o);
if("#".equals(o)){
/*
使用迭代器遍历集合元素的过程中不要通过集合的add,
remove这样的 *** 作增删元素,否则迭代器会抛出异常:
java.util.ConcurrentModificationException
*/
//c.remove(o);
//用迭代器可以删除
it.remove();
}
}
System.out.println(c);
}
}
JDK5之后,推出了一个新的特性增强型for循环,也成为了新循环,是可以使用相同的语法遍历集合或数组
/* 语法
* for(元素类型 变量名:集合或数组){
* ...
* }
*/
//遍历数组
String[] array = {"one","two","three","four","five"};
//加强for循环只是用来遍历集合或数组
for(String e : array){
System.out.println(e);
}
//遍历集合
Collection c = new ArrayList();
c.add("one");
c.add("two");
c.add("three");
c.add("four");
c.add("five");
System.out.println(c);
//在java底层还是将加强for循环变为迭代器遍历
//注意 : 因为集合里的每一个元素,是可以不相同的,所以返回用Object接受
for( Object o : c){
String s = (String)o;
System.out.println(s);
}
泛型 * 泛型也称为参数化类型,它允许我们在使用一个类时去指定该类中某个属性的类型或方法返回 * 值的类型或方法参数的类型,使得我们使用这个类时更方便更灵活。 * 泛型在集合中广泛使用,用于指定该集合中的元素类型。
/*
Collection定义时,指定了一个泛型E。我们在实际使用集合时可以指定
E的实际类型。这样一来,编译器会检查我们使用泛型时的类型是否匹配。例如
集合的方法:
boolean add(E e)
编译器会检查我们调用add方法向集合中添加元素时,元素的类型是否为E指定的
类型,不符合编译不通过。
<>尖括号里面只能写引用类型,是用来指定集合元素的数据类型
*/
Collection c = new ArrayList<>();
c.add("one");
c.add("two");
c.add("three");
c.add("four");
c.add("five");
System.out.println(c);
//注意 : 因为集合里的每一个元素,是可以不相同的,所以返回用Object接受
for( Object o : c){
String s = (String)o;
System.out.println(s);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)