java集合(1)

来源:互联网 发布:java web项目搭建教程 编辑:程序博客网 时间:2024/06/05 04:24

Java集合类是一种特别有用的工具类,可用于存储数量不等的对象,并实现常用的数据结构,如栈,队列等。Java集合大致可分为set,List,queue,和map,其中Set代表无序,不可重复的集合,List代表有序,可重复的集合。集合类和数组是不一样的,数组中的元素可以是基本类型,也可以是对象(实际上保存的是对象的引用变量);而集合里只能保存对象(实际上保存的是对象的引用变量,但是通常习惯上认为集合里保存的是对象)。Collection和Map是Java集合框架的根接口。

Collection集合体系的继承树:

Map集合体系的继承树:

 


Collection接口是List、Set和Queue接口的父接口,该接口里定义的方法既可用于操作Set集合,也可用于操作List和Queue集合。Collection接口的操作如下操作集合元素的方法。

boolean add(Object e) : 该方法用于向集合中添加一个元素,如果添加元素成功返回true。

 boolean addAll(Collection c) :把集合c中的所有元素都添加到此 指定的集合中。

 voidclear() :删除集合里的所有元素,将集合长度变为0。

 boolean contains(Object o) :判断集合是否包含指定的元素o,如果包含返回true。

 boolean containsAll(Collection c) :判断集合是否包含指定的集合c中所有的元素,如果包含返回true。

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

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

 boolean remove(Object o) :删除集合中指定的元素o, 当集合中包含了一个或多个元素o时该方法只删除第一个符合条件的元素,该方法将返回true。

 booleanremoveAll(Collection<?> c) :从集合中删除集合c中包含的所有元素(相当于用调用该方法的集合减去集合c)如果删除一个或一个以上的元素,返回true,。

 boolean retainAll(Collection<?> c) :仅保留此 collection 中那些也包含在指定 collection 的元素,如果该操作改变了调用该方法的集合,则返回true

 intsize() :返回此 collection 中的元素数。

 Object[] toArray() :该方法把集合转换成一个数组,所有的集合元素变成对应的数组元素。

用Collection集合的一些方法操作集合里的元素。

使用Lambda表达式遍历集合

Java8为Iterable接口新增了一个forEach(Consumer action) 默认方法,该方法所需的类型是一个函数式接口,而Iteratle接口是Collection接口的父接口,因此Collection集合也直接调用该方法。

当程序调用Iterable的forEach(Consumeraction)遍历集合元素时,程序会依次将集合元素传给Consumer的accept(T t)方法(该接口唯一的抽象方法)。正因为Consumer是函数式接口,因此可以使用Lambda表达式来遍历集合元素。

使用Lambda表达式来遍历集合元素。

public class CollectionEach {

  public static void main(String[] args) {

     Collection books=newHashSet();

     books.add("java ee");

     books.add("java讲义");

     books.add("javaweb讲义");

     books.forEach(obj->System.out.println("迭代集合元素:"+obj));

  }

}

使用Iterator遍历集合元素

Iterator接口也是Java集合框架的成员,但它与Collection系列、Map系列的集合不一样:Collection系列集合、Map系列集合主要用于盛装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。

Iterator接口里定义了如下4个方法:

-boolean hasNext():如果被迭代的集合还元素没有被遍历,则返回true。

-Object next():返回集合里下一个元素。

-void remove() :删除集合里上一次next方法返回的元素

-void forEachRemaining(Consumer action),这是Java 8为Iterator新增的默认方法,该方法可使用Iterator接口来遍历集合元素。

public class CollectionEach {

       publicstatic void main(String[] args) {

              Collectionbooks=new HashSet();

              books.add("javaee");

              books.add("java讲义");

              books.add("javaweb讲义");

              Iteratorit=books.iterator();

              while(it.hasNext()){

                     Stringbook=(String)it.next();

                     System.out.println(book);

                     if(book.equals("javaee")){

                            //从集合中删除上一次next()方法返回的元素

                            it.remove();

                     }

//对book变量赋值,不会改变集合元素本身

                     book="测试数据";

              }

              System.out.println("----------------");

              System.out.println(books);

       }

}

Iterabor仅用于遍历集合,Iterator本身并不提供盛装对象的能力,没有集合的Iterator仿佛无本之木,没有存在的价值。

 

当使用Iterabor循环迭代访问集合元素时,该集合的元素不能被改变只有通过Iterabor的remove()方法删除上一次next()方法返回的集合元素才可以,否则将引发ConcurrentModificationException异常下面为程序示范了这一点。

public class CollectionEach {

       publicstatic void main(String[] args) {

              Collectionbooks=new HashSet();

              books.add("javaee");

              books.add("java讲义");

              books.add("javaweb讲义");

              Iteratorit=books.iterator();

              it.forEachRemaining(obj->System.out.println("books:"+obj));

              for(Objectobj:books){

                     Stringbook=(String)obj;

                     System.out.println(book);

                     if(book.equals("javaee")){

                            //使用Iterator迭代过程中,不可修改集合元素,下面代码引发异常

                            books.remove(book);

                     }

              }

       }

}