集合
java.util.Collection 集合-用于存储一组元素,提供了用于维护集合的相关操作,它派生了两个接口,List-可重复集,Set-不可重复集
- boolean add(Object obj) 向集合中添加元素,添加成功返回true
Collection<String> c = new ArrayList<String>();//尖括号中为集合的泛型,基本上每创建一个集合都应该为集合创建一个泛型,其规定了集合当中
存储的数据类型,利于维护和错误检查
c.add("a");c.add("b");c.add("c");
System.out.println(c.add("a"));//true
System.out.println(c);//[a,b,c]
- int size() 返回集合当中元素的个数。它与数组的长度length有很大区别,数组的长度在声明数组时就以固定,要想超过数组长度再添加元素必须扩容。而集合的size表示集合当中元素的具体个数,没有限制
System.out.println(c.size());//3
- boolean isEmpty() 判断集合是否为空
System.out.println(c.isEmpty());//false
- void clear() 清空集合元素
c.clear();
System.out.println(c.size());//0
System.out.println(c.isEmpty());//true
- boolean contains(Object obj) 判断当前集合是否包含某个元素,判断的依据是根据元素的equals方法比较的结果而定,如果比较结果为true,则视为包含
//先声明一个Point类,包含x、y两个成员变量,提供带参构造,equals方法等在此不做赘述,可由eclipse自动生成
Collection<Object> c = new ArrayList<Object>();
c.add(new Point(1,2));
c.add(new Point(3,4));
c.add(new Point(5,6));
System.out.println(c);//[(1,2), (3,4), (5,6)]
Point p = new Point(1,2);
System.out.println("是否包含?"+c.contains(p));//true
- 集合存放元素,实际存放的是元素的引用
Collection<Point> c = new ArrayList<Point>();
Point p = new Point(1,2);
System.out.println(p);//(1,2)
c.add(p);
System.out.println(c);//[(1,2)]
p.setX(2);
System.out.println(p);//(2,2)
System.out.println(c);//[(2,2)]
- boolean remove(Object obj) 删除一个集合元素 删除成功返回true 删除元素同样利用元素的equals方法将当前元素与集合中的元素进行比较,比较结果为true则删除该元素
Point p = new Point(1,2);
c.remove(p);
System.out.println(c);//[(3,4), (5,6)]
集合的批量操作
- List 有序 可重复集合 Set 无序 不可重复集合
/**
* List 有序 可重复
*/
Collection<String> c1 = new ArrayList<String>();
c1.add("c");
c1.add("c++");
c1.add("Java");
System.out.println("c1:"+c1);//c1:[c, c++, Java]
/**
* Set 无序 不可重复
*/
Collection<String> c2 = new HashSet<String>();
c2.add("Android");
c2.add("ios");
c2.add(".net");
c2.add("Java");
c2.add("ios");
System.out.println("c2:"+c2);//c2:[Java, .net, ios, Android]
- boolean addAll(Collection c) 取并集操作 将一个集合添加到另一个集合中,添加后集合的元素发生了变化则返回true
boolean flag = c1.addAll(c2);
System.out.println(flag+" "+c1);//true [c, c++, Java, Java, .net, ios, Android] 由于c1为可重复集,所以会有两个Java
- boolean containsAll(Collection c) 是否包含一个集合中的全部元素
Collection<String> c3 = new ArrayList<String>();
c3.add("java");
c3.add("android");
boolean isContains = c1.containsAll(c3);
System.out.println("是否全包含?"+isContains);//true
- void removeAll(Collection c) 删除当前集合中两个集合的共有元素
c1.removeAll(c2);
System.out.println(c1);//[c,c++]
集合的遍历
Collection提供了统一的集合遍历方式-迭代器模式
java.util.Iterator是一个接口,规定了用于遍历集合的相关方法,不同的集合提供了相应的实现类,无需记住他们的名字,只将他们当做Iterator即可
遍历集合遵循:问-取-删 的原则,其中删除不是必须操作
- boolean hasNext() 问的过程,该方法判断集合中是否有元素可以取出
- E next() 取的过程 取出该元素
- void remove() 删除元素
Iterator<String> it = c.Iteratro();//获取用于遍历当前集合的迭代器
while(it.hasNext()){
String str = it.next();
if("c".equals(str)){
it.remove();//在使用迭代器遍历集合时不要用集合的方式删除元素c.remove(str),否则会抛出异常
}
System.out.println(str);//a b
}
System.out.println(c);[a,b]
增强型for循环遍历集合
for(String str : c){
System.out.println(str);//a b c
}