java集合框架
java.util.Collection接口
Collection接口中定义了所有集合都要具备的功能,它也是所有集合的顶级接口。
Collection下面有几种不同集合的分类,常见的两个:
1.java.util.List:List接口表示的是线性表,是有序的且可以存放重复元素的集合 *
2.java.util.Set:Set接口表示的是不可重复的集合
这里指的重复是元素是否可以重复,而判断重复的标准是根据元素自身equals比较。
public static void main(String[] args) { Collection c = new ArrayList(); /* * boolean add(E e) * 向当前集合中添加给定元素,成功添加后返回true */ c.add("one"); c.add("two"); c.add("three"); c.add("four"); c.add("five"); System.out.println(c); /* * int size() * 返回当前集合的元素个数 */ int size = c.size(); System.out.println("size:"+size); /* * boolean isEmpty() * 判断当前集合是否为空集 */ boolean isEmpty = c.isEmpty(); System.out.println("isEmpty:"+isEmpty); /* * void clear() * 清空集合 */ c.clear(); System.out.println(c); System.out.println("size:"+c.size()); System.out.println("isEmpty:"+c.isEmpty()); }
boolean contains(E e)
判断当前集合是否包含给定元素,是否包含的依据是是否
与集合现有元素存在equals比较 为true的情况。
public static void main(String[] args) { Collection c = new ArrayList(); c.add(new Point(1,2)); c.add(new Point(3,4)); c.add(new Point(5,6)); c.add(new Point(7,8)); System.out.println(c); Point p = new Point(1,2); boolean contains = c.contains(p); System.out.println("包含:"+contains); /* * 删除元素也是依靠元素equals比较进行删除的,如果集合有重复元素则 * 只删除一次。 */ c.remove(p); System.out.println(c); }
集合只能放引用类型元素,并且存放的也是元素的引用(地址)
public static void main(String[] args) { Collection c = new ArrayList(); Point p = new Point(1,2); c.add(p); System.out.println("p:"+p); System.out.println("c:"+c); p.setX(2); System.out.println("p:"+p); System.out.println("c:"+c); }
运行结果为
public static void main(String[] args) { Collection<String> c1 = new ArrayList<>(); // Collection c1 = new HashSet();//HashSet是由HashMap实现的 c1.add("java"); c1.add("c++"); c1.add(".net"); System.out.println("c1:"+c1); Collection<String> c2 = new ArrayList<>(); c2.add("ios"); c2.add("android"); c2.add("java"); System.out.println("c2:"+c2); /* * addAll方法是取并集操作,会将给定集合中的所有元素添加到当前集合中。 * 如果当前集合是Set集合,重复元素不能被再次添加进集合。 */ c1.addAll(c2); System.out.println("c1:"+c1); Collection<String> c3 = new ArrayList<>(); c3.add("c++"); c3.add("android"); c3.add("php"); System.out.println("c3:"+c3); /* * containsAll用于判断当前集合是否包含给定集合中的所有元素 */ boolean contains = c1.containsAll(c3); System.out.println("全包含:"+contains); /* * removeAll用于删除当前集合中与给定集合的共有元素。给定集合中的元素 * 不受影响。 */ c1.removeAll(c3); System.out.println("c1:"+c1); System.out.println("c3:"+c3); }
遍历集合
Iterator iterator
该方法可以获取一个用于遍历当前集合元素的迭代器
java.util.Iterator接口,迭代器接口
迭代器接口规定了使用迭代器方式办理集合的相关操作,不同的集合都提供了对应的 实现类,我们无需记住这些具体实现类的名字,只要当作是Iterator看即可(多态),然后根据定义的相关操作遍历即可。
迭代器遍历集合遵循的原则是:问,取,删
其中删除元素不是必要操作。
public static void main(String[] args) { Collection<String> 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); @SuppressWarnings("rawtypes") Iterator it = c.iterator(); /* * boolean hasNext() * 通过迭代器判断集合是否还有下一个元素可以遍历 */ while(it.hasNext()) { /* * E next() * 通过迭代器遍历集合下一个元素 */ String str =(String)it.next(); if("#".equals(str)) { //迭代器要求在遍历的过程中不得通过集合方法增删元素,否则抛异常 // c.remove(str); //迭代器的remove方法可以将本次next()遍历的元素从集合中删除 it.remove(); } System.out.println(str); } System.out.println(c); }
结果如下