Java基础 | Collection

Java集合是一种特别有用的工具类,可用于存储数量不等的对象,并可以实现常用的数据结构,如堆,栈.Java集合还可以用于保存具有映射关系的关联数组.
Java集合大致分为Set、List、Queue、Map四种体系:

  • Set代表无序、不可重复的集合
  • List代表有序、重复的集合
  • Queue是一种队列集合实现
  • Map代表具有映射关系的集合

Java概述

所有的Java集合类都位于java.util包下,后来为了处理多线程环境下的并发问题。在java.util.concurrent包下提供了一些多线程支持的集合类

集合和数组的区别

  • 集合保存的数据的数量是可变的,而一旦在初始化数组时制定了长度,数组的长度就不可改变
  • 集合可以保存具有映射关系的数据
  • 集合只能保存对象(其实是对象的引用变量),而数组既可以保存基本类型的值,也可以保存对象(还是对象的引用变量)

Java主要由两个接口派生:Collection和Map,他们是java集合框架的根接口。
其中Set、List、Queue子接口是collection接口派生的子接口。

对于Set、List、Queue、Map四种集合,最常用的实现类有HashSet、TreeSet、ArrayList、LinkedList、ArrayDeque、HashMap和TreeMap七种。

Collection和Iterator接口

Collection接口里定义的方法可以操作List、Queue和Set.

Collection接口的方法

//向集合里添加一个对象,如果集合对象被改变了就返回true
boolean add(Object o)
//把集合c中的所有集合添加到指定集合,如果集合对象被改变了,返回true
boolean addAll(Collection c)
//清除集合,把长度变成0
void clear()
//判断集合中是否包含指定元素
boolean contains(Object o)
//判断集合中是否包含集合c中所有的元素
boolean contains All(Collection c)
//判断集合是否为空,长度为0返回true,其余放回false
boolean isEmpty()
//返回一个Iterator对象,用于遍历集合中的元素
Iterator iterator()
//删除集合中的指定元素o,当集合中包含多个o时,只删除第一个,返回true.
boolean remove(Object o)
//从集合中删去集合c中的所有元素,如果删去一个以上的元素,返回true
boolean removeAll(Collection c)
//得到集合里元素的个数
int size()
//把集合转换为数组
Object[] toArray()

使用Lambda表达式遍历集合

Java8为Iterable接口新增了一个forEach默认方法,因为Iterable接口是Collection接口的父接口,所以collection集合都能用.

Collection books = new HashSet()
books.add("朝花夕拾")
books.add("童年")
books.add("家")
//和groovy的闭包类似
books.forEach(obj -> System.out.println("--->"+obj))

使用Iterator遍历集合元素

Iterator接口也是java集合框架的成员,主要用于遍历集合,Iterator也被成为迭代器。

Iterator接口提供了遍历collection集合元素的统一编程接口。Iterator接口定义了四个方法:

//被迭代的集合还没有被遍历完,返回true
boolean hasNext()
//返回集合里的下一元素
Object next()
//删除集合里上一次next返回的元素
void remove()
//使用Lambda表达式来遍历集合中的元素
void forEachRemaining(Consumer action)
    Iterator it = books.iterator();
    while(it.hasNext()){
        //it.next()返回的数据是Object类型,所以强转
        String book = (String)it.next();
        System.out.println(book);
        if(book.equals("家")){
            //从集合中删除next返回的元素
            it.remove();
        }
        //对book赋值,不会改变集合元素本身
        book='昆虫记';
    }

    //使用Lambda表达式来遍历元素集合
    it.forEachRemaining(obj -> System.out.println(obj))

关于迭代器有几点需要注意:

  1. 在进行迭代时,迭代器只是把元素集合的值传给了迭代变量,而不是集合元素本省
  2. 在进行迭代时,集合中的元素不能被改变。remove()方法是例外。否则会引起java.util.ConcurrentModificationException异常

使用foreach循环遍历集合元素

    for(Object obj : books){
        //此时的book变量也是不是集合元素本身
        String book = (String)obj;
        System.out.println(book);
        if(book.equals("家")){
            //从集合中删除next返回的元素
            it.remove();
        }
    }

使用Java8新增的Predicate操作集合

Java8为Collection集合新增了一个removeIf(Predicate filter)方法,该方法会批量删除符合filter条件的所有集合元素,Predicate也是函数式接口,因此可以使用Lambda表达式作为参数。


    //删去集合books中长度下雨10的元素
    books.removeIf(ele -> ((String)ele).length()<10)

使用Java8新增的Stream操作集合

猜你喜欢

转载自blog.csdn.net/dora_310/article/details/72831365