java集合

集合概述

  • 集合类位于java.util包下
  • Java集合类时非常实用,可以用于存储数量不等的对象,并可以实现常用的数据结构,如栈,队列等。

注意: Java集合类只能用于存放对象(实际是对象的引用)

  • Java集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的跟接口,这两个接口又包含了一些子接口和实现类
  • Java集合现在大致可以分为四大体系:Set、List、Queue、Map
  • List和Set接口是Collection接口派生的两个子接口,分别代表了有序集合和无序集合
  • Queue是Java提供的队列的实现,有点类似于List
  • Map的实现类用于保存具有映射关系的数据,即关联数组

Map保存的每对数据都是key-value对,key不准重复

  • Set、List、Queue、Map集合的常用实现类:HashSet、TreeSet、ArrayList、ArrayDeque、LinkedList、HashMap、TreeMap等

Collection和Iterator接口

  • Collection接口是List、Set和Queue接口父接口,该接口中的方法可以用来操作List、Set和Queue集合。以下是Collection集合中的一些方法的代码体现
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;

public class CollectionTest {
    public static void main(String[] args) {
        //创建一个集合c
        Collection c = new ArrayList();
        //为集合c中添加元素
        c.add("yjh");
        //为集合c中添加元素
        c.add(6);
        //输出集合c元素的个数
        System.out.println("c集合的个数为:" + c.size());
        //删除集合c中指定元素
        c.remove(6);
        //输出集合c中元素个数,验证元素已被删除
        System.out.println("c集合的个数为:" + c.size());
        //返回集合c中是否包含指定元素
        System.out.println("c集合是否包含\"yjh\"字符串:" + c.contains("yjh"));
        c.add("728");
        //输出集合c中所有元素
        System.out.println("c集合的元素:" + c);
        //创建一个集合books
        Collection books = new HashSet();
        //为集合books添加元素
        books.add("cpp");
        //为集合books添加元素
        books.add("疯狂java讲义");
        //返回集合c中是否包含集合books中的所有元素
        System.out.println("c集合是否包含books集合的所有元素:" + c.containsAll(books));
        //删除集合c中的books集合元素
        c.removeAll(books);
        //输出集合c中的元素
        System.out.println("c集合的元素:" + c);
        //删除集合c中的所有元素
        c.clear();
        //输出集合c中的所有元素
        System.out.println("c集合的元素:" + c);
        //删除集合books中所有不属于集合c的元素
        books.retainAll(c);
        //输出集合books中所有元素
        System.out.println("books集合的元素:" + books);
    }
}

遍历集合的几种方法

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class CollectionEach {
    public static void main(String[] args) {
        Collection c = new HashSet();
        c.add("yjh");
        c.add("728");
        //hashSet不能添加相同的元素,若元素内容相同,但hashCode()的返回值不同也可添加成功
        System.out.println(c.add("yjh"));
        c.add("YJH");
        c.add("616");
        //使用Lambda表达式遍历集合
        c.forEach(obj -> System.out.println("迭代元素集合:" + obj));
        //使用Iterator遍历集合
        Iterator it = c.iterator();
        while (it.hasNext()) {
            String s = (String) it.next();
            System.out.println(s);
            if (s == "YJH") {
                //在迭代器中删除集合元素会引发ConcurrentModificationException异常
                //c.remove(s);
                it.remove();
            }
            //迭代变量对集合本身没有影响,相当于将集合中的元素复制了一份给迭代变量
            s = "yjh728";
        }
        System.out.println("c:" + c);
        c.add("YJH");
        System.out.println("c:" + c);
        //使用Lambda表达式遍历Iterator
        //Iterator的对象只能被使用一次,下次使用时须重新进行赋值
        it = c.iterator();
        it.forEachRemaining(obj -> System.out.println("迭代元素:" + obj));
        //使用ForEach遍历集合
        for (Object obj : c) {
            String s = (String) obj;
            System.out.println(s);
            if (s.equals("YJH")) {
                //引发ConcurrentModificationException异常
                //c.remove(s);
            }
        }
        System.out.println("c:" + c);
    }
}