集合(一)

集合概述

为了保存数量不确定的数据,以及保存具有映射关系的数据,java提供了集合类。集合类主要负责保存,盛装其他数据,因此集合类也被称为容器类。所有的集合类都位于 java.util 包下,后来为了处理多线程环境下的并发安全问题,Java5还在java.util.concurrent 包下提供了一些多线程支持的集合类。

集合类和数组不一样,数组元素即可以是基本数据类型,也可以是对象(实际上保存的是对象的应用变量);而集合里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为集合里保存的对象)

java的集合类有两个接口派生而出: Collection和 Map,

Collection下面有Set(无序集合,元素不可重复),Queue(队列),List(有序集合,元素可以集合)。

Set :EnumSet,SortedSet(TreeSet), HashSet(LinkedHashSet)

Queue : Deque(ArrayDeque, LinkedList), Priority

List :ArrayList, Vector(Stack)

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集合是否包含孙悟空字符串: "+c.contains("孙悟空"));
        c.add("轻量级Java EE企业应用实战");
        System.out.println("c集合里的元素为: "+c);

        Collection books = new HashSet();
        books.add("轻量级Java EE企业应用实战");
        books.add("疯狂java讲义");
        System.out.println("c集合是否完全包含books集合?"+c.containsAll(books));
        c.removeAll(books);
        System.out.println("c集合里面的元素 "+c);
        c.clear();
        System.out.println("c集合的元素: "+c);
        books.retainAll(c);
        System.out.println("books集合的元素: "+books);


    }
}

使用Lambda表达式遍历集合

java8 为Iterable接口新增了一个forEach默认方法,该方法所需参数的类型是一个函数式接口,而Iterable 接口时Collection的父接口。因此Collection集合也可以直接调用该方法。

public class CollectionEach {
    public static void main(String[] args) {
        Collection books = new HashSet();
        books.add("轻量级Java EE企业应用实战");
        books.add("疯狂Java 讲义");
        books.add("疯狂Android讲义");
        books.forEach(obj->{
            System.out.println("迭代集合元素: "+obj);
        });
    }
}

使用 java8 增强的Iterator遍历集合元素

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

public class IteratorTest {
    public static void main(String[] args) {
        Collection books = new HashSet();
        books.add("轻量级Java EE企业应用实战");
        books.add("疯狂Java讲义");
        books.add("疯狂Android讲义");

        Iterator it = books.iterator();

        while (it.hasNext()){
            System.out.println(it.next());
        }
    }
}

使用Lambda 表达式遍历 Iterator

public class IteratorEach {
    public static void main(String[] args) {
        
        Collection books = new HashSet();
        books.add("轻量级Java EE企业应用实战");
        books.add("疯狂Java讲义");
        books.add("疯狂Android讲义");
        Iterator it = books.iterator();
        it.forEachRemaining(obj -> System.out.println("迭代集合元素: "+obj));
    }
}

使用foreach 循环遍历集合元素

public class ForeachTest {
    public static void main(String[] args) {
        Collection books = new HashSet();
        books.add("轻量级Java EE企业应用实战");
        books.add("疯狂Java讲义");
        books.add("疯狂Android讲义");
        
        for (Object book : books) {
            System.out.println(book);
        }
    }
}

使用java8新增的Predicate 操作集合

java8起Collection集合新增了一个removelf方法,该方法将会批量删除符合filter条件的所有元素

public class ForeachTest {
    public static void main(String[] args) {
        Collection books = new HashSet();

        books.add(new String("轻量级Java EE企业应用实战1"));
        books.add(new String("轻量级Java EE企业应用实战2"));
        books.add(new String("轻量级Java EE企业应用实战3"));
        books.add(new String("轻量级Java4"));
        books.add(new String("轻量级Java5"));
        books.add(new String("轻量级Java6"));
        books.add(new String("轻量级Java7"));
        books.add(new String("轻量级Java8"));
        books.add(new String("轻量级Java9"));

        books.removeIf(ele->((String)ele).length()<10);
        System.out.println(books);


    }
}

使用java8新增的 Stream 操作集合

public class IntStreamTest {
    public static void main(String[] args) {
        IntStream is = IntStream.builder()
                .add(20)
                .add(13)
                .add(-2)
                .add(18)
                .build();

        System.out.println("is所有元素的最大值: "+is.max().getAsInt());
        System.out.println("is所有的元素的平方是否都大于20: "+is.allMatch(els->els*els >20));

        is.forEach(System.out::println);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值