您的位置:首页 > 编程语言 > Java开发

[Java集合](一)概述

2017-12-18 16:39 162 查看

概述

  Java集合类是一种特别常用的工具类,可用于存储数量不等的对象,并可以实现常用的数据结构,如栈、队列等,除此之外,Java集合还可用于保存具有映射关系的关联数组。

  Java集合大致可分为Set、List、Queue和Map四种体系,其中Set代表无序、不可重复的集合,List代表有序、可重复的集合,Map代表具有映射关系的集合,Queue代表一种队列集合实现,如下图所示:

  


  

  Java的集合类主要由两种接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口。下图分别是两种集合所包含的各种集合子类。

  


  



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

  

Collection接口

Collection 接口是List、Set、Queue接口的父接口,定义了如下操作集合元素的方法:
1.1 boolean add(Object o)
向集合里添加一个元素,如果集合对象被添加操作改变则返回true;

1.2 boolean addAll(Collection c)
将指定 collection 中的所有元素都添加到此 collection 中,如果集合对象被添加返回true;

1.3 void clear()
移除此 collection 中的所有元素,将集合长度变为0;

1.4 boolean contains(Object o)
如果此 collection 包含指定的元素,则返回 true。

1.5 boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。

1.6 boolean equals(Object o)
比较此 collection 与指定对象是否相等。

1.7 int hashCode()
返回此 collection 的哈希码值。

1.8 boolean isEmpty()
如果此 collection 不包含元素,则返回 true。

1.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java