[Java集合](一)概述

来源:互联网 发布:dynamic duo知乎 编辑:程序博客网 时间:2024/04/25 21:21

概述

  Java集合类是一种特别常用的工具类,可用于存储数量不等的对象,并可以实现常用的数据结构,如栈、队列等,除此之外,Java集合还可用于保存具有映射关系的关联数组。
  Java集合大致可分为Set、List、Queue和Map四种体系,其中Set代表无序、不可重复的集合,List代表有序、可重复的集合,Map代表具有映射关系的集合,Queue代表一种队列集合实现,如下图所示:
  这里写图片描述
  
  Java的集合类主要由两种接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口。下图分别是两种集合所包含的各种集合子类。
  Collection集合体系
  
这里写图片描述

  对于Set、List、Queue和Map四种集合,最常用的实现类分别是:HashSet、TreeSet、ArrayList、ArrayDeque、LinkedList和HashMap等实现类。
  

Collection接口

Collection 接口是List、Set、Queue接口的父接口,定义了如下操作集合元素的方法:    1.1 boolean add(Object o)             向集合里添加一个元素,如果集合对象被添加操作改变则返回true1.2 boolean addAll(Collection c)             将指定 collection 中的所有元素都添加到此 collection 中,如果集合对象被添加返回true;     1.3 void clear()             移除此 collection 中的所有元素,将集合长度变为01.4 boolean contains(Object o)             如果此 collection 包含指定的元素,则返回 true1.5 boolean containsAll(Collection<?> c)             如果此 collection 包含指定 collection 中的所有元素,则返回 true1.6 boolean equals(Object o)             比较此 collection 与指定对象是否相等。     1.7 int hashCode()             返回此 collection 的哈希码值。      1.8 boolean isEmpty()             如果此 collection 不包含元素,则返回 true1.9 Iterator<E> iterator()              返回一个Iterator对象,用于遍历集合里的元素;     1.10 boolean remove(Object o)             从此 collection 中移除指定元素的单个实例,如果存在的话返回true;      1.11 boolean removeAll(Collection c)             移除此 collection 中那些也包含在指定 collection 中的所有元素,如果存在的话返回true;      1.12 boolean retainAll(Collection c)             仅保留此 collection 中那些也包含在指定 collection 的元素,如果存在的话返回true;     1.13 int size()             返回此 collection 中的元素个数;     1.14 Object[] toArray()             该方法把集合转换成一个数组,所有的集合元素变成对应的数组元素;

 集合类就像容器,以上的各种方法就是添加对象、删除对象、清空容器、判断容器是否为空、计算容器大小等方法。
 

import java.util.ArrayList;  import java.util.Collection;  import java.util.HashSet;  public class CollectionTest {      public static void main(String[] args) {          Collection c = new ArrayList();          // 添加元素          c.add("孙悟空");          c.add(6);          // 输出集合元素个数          System.out.println("c的集合个数为:" + c.size());          // 移除指定元素          c.remove(6);          System.out.println("c的集合个数为:" + c.size());          // 判断集合是否包含某个元素          System.out.println("判断集合是否包含某个元素:" + c.contains("孙悟空"));          c.add("Java EE");          System.out.println("c的集合元素:" + c);          Collection books = new HashSet();          books.add("孙悟空");          books.add("Java讲义");          // c集合是否完全包含books集合          System.out.println("c集合是否完全包含books集合" + c.containsAll(books));          // 用c集合减去books集合里的元素          c.removeAll(books);          System.out.println("c的集合元素:" + c);          // 删除c集合里的所有元素          c.clear();          System.out.println("c的集合元素:" + c);          // books 集合里面只剩下c集合里也包含的元素          books.removeAll(c);          System.out.println("books的集合元素:" + books);      }  }  运行结果:           c的集合个数为:2           c的集合个数为:1           判断集合是否包含某个元素:true           c的集合元素:[孙悟空, Java EE]           c集合是否完全包含books集合false           c的集合元素:[Java EE]           c的集合元素:[]           books的集合元素:[Java讲义, 孙悟空]  

Iterator接口

  Iterator接口主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。
  使用 Iterator 对集合元素进行迭代时,并不是把集合元素本身传给迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何影响。
  
提供的方法
1. boolean hasNext()如果仍有元素可以迭代,则返回 true。
2. Object next()返回迭代的下一个元素。
3. void remove()删除集合里上一次next方法返回的元素。
4. void forEachRemaining(Consumer action),该方法可用Lambda表达式来遍历集合元素。 

import java.util.Collection;  import java.util.HashSet;  import java.util.Iterator;  public class IteratorTest {      public static void main(String[] args) {          Collection books = new HashSet();          books.add("A书");          books.add("B书");          books.add("C书");          // 获取books集合对应的迭代器          Iterator it = books.iterator();          while (it.hasNext()) {              // it.next()返回的是一个对象类型,需要强制转换              String book = (String) it.next();              System.out.println(book);              if (book.equals("B书")) {                  // 从集合中删除上一次next方法返回的元素                  it.remove();              }              // book变量赋值,不会改变集合元素本身              book = "C书";          }          System.out.println(books);      }  }  

除了上面的方法,也可以使用foreach循环遍历集合元素,比起Iterator更加简洁,同样集合不能被改变。

import java.util.Collection;  import java.util.HashSet;  import java.util.Iterator;  public class ForeachTest {      public static void main(String[] args) {          Collection books = new HashSet();          books.add("A书");          books.add("B书");          books.add("C书");          for(Object obj:books){              String book=(String)obj;              System.out.println(book);              if(book.equals("B书")){                  books.remove(book);              }          }          System.out.println(books);      }  } Error:java.util.ConcurrentModificationException

注意:
  Iterator必须依附于Collection对象,若有一个Iterator对象,则必然有一个与之冠梁的Collection对象。Iterator提供了两个方法来迭代访问Collection集合里的元素,并可通过remove()方法来删除集合中上一个next()方法返回的集合元素。

参考链接: http://blog.csdn.net/meyoung01/article/details/15812895

原创粉丝点击