java集合Collection常用方法解读

目录
  • 前言
  • 为什么要有集合
  • Collection方法接口介绍
  • java8新特性操作集合
  • 总结

前言

出去面试的时候,对java的集合框架考察的知识点还是蛮多的。除了基础的集合常见API使用,对集合底层的实现原理以及数据结构等也有很多考察方面。而自己对这方面知之甚少,特地抽空进行研究和学习一下。

为什么要有集合

提到集合就不得不提一下数组,好多集合底层都是依赖于数组的实现。数组一旦初始化后,长度就确定了,存储数据对象不能达到动态扩展,其次数组存储元素不便于对数组进行添加、修改、删除操作,而且数组可以存储重复元素。

这个时候集合对作用显现出来了。

集合分为CollectionMap两种体系。

下面先介绍Collection的集合类的继承树如下图所示:

Collection接口是 (java.util.Collection)是Java集合类的顶级接口之一,整个集合框架就围绕一组标准接口而设计,本文研究的集合基于JDK8的实现,下面将会进行多个集合类方法使用和主要方法源码分析,以作为后续出去面试的参考资料。

Collection方法接口介绍

Collection 接口有 3 种子类型集合: ListSetQueue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、ArrayBlockingQueue等,下面是Collection的所有方法。

这些方法即可以操作Set集合,也可以操作Queue和List集合,下面分别使用Collection集合接口的方法说明

方法名 说明
boolean add(E e) 向集合添加元素e,若指定集合元素改变了则返回true
boolean addAll(Collection<? extends E> c) 把集合C中的元素全部添加到集合中,若指定集合元素改变返回true
void clear() 清空所有集合元素
boolean contains(Object o) 判断指定集合是否包含对象o
boolean containsAll(Collection<?> c) 判断指定集合是否包含集合c的所有元素
boolean isEmpty() 判断指定集合的元素size是否为0
boolean remove(Object o) 删除集合中的元素对象o,若集合有多个o元素,则只会删除第一个元素
boolean removeAll(Collection<?> c) 删除指定集合包含集合c的元素
boolean retainAll(Collection<?> c) 从指定集合中保留包含集合c的元素,其他元素则删除
int size() 集合的元素个数
T[] toArray(T[] a) 将集合转换为T类型的数组

下面是主要方法的演示:

  @Test
    @SuppressWarnings("all")
    public void testCollection() {
        // 创建Collection接口的实现
        Collection collection = new ArrayList<>();
        // 添加元素
        collection.add("嘻嘻");
        String src = "????";
        collection.add(src);
        System.out.println(collection);

        // 创建Collection的实现
        Collection<String> coll = new HashSet<>();
        coll.add("?");
        coll.add("?");
        coll.add("?");
        System.out.println(coll);
        // 添加一个集合数据
        collection.addAll(coll);
        // 输出集合的长度
        System.out.println(collection);
        // 判断是否包含
        System.out.println(collection.contains("?"));
        // 移除元素
        collection.remove("?");
        // 添加对象
        collection.add(new Person("张三", 23, 5000d));
        // 当认为两个对象属性一致,相等时候,需重写hashCode 和 equals方法
        System.out.println(collection.contains(new Person("张三", 23, 5000d)));

        System.out.println("-------");
        collection.add(null);

        Collection<String> collection1 = new ArrayList<>();
        collection1.add("嘻嘻");
        collection1.add("?");
        // 求两个集合的交集(只保留collection1存在的元素)
        collection.retainAll(collection1);
        System.out.println(collection);
        // 清空元素
        collection.clear();
        System.out.println(collection);
    }

java8新特性操作集合

使用lambda表达式遍历集合

java8为Collection的父接口(Iterable)提供了一个默认的Foreach方法,我们可以使用它进行集合遍历,若对lambda不太了解,不妨访问一下这篇文章☞ lambda表达式学习

   @Test
    public void testForeach() {
        Collection<String> collection = new ArrayList<>();
        collection.add("i");
        collection.add("love");
        collection.add("china");
        // foreach遍历
        collection.forEach(e-> System.out.println(e));
        // 可以使用方法引用简写
        collection.forEach(System.out::println);
        // 或者迭代器的forEachRemaining方法
       collection.iterator().forEachRemaining(System.out::println);
    }

使用java8的predicate操作集合

    @Test
    public void testPredicate() {
        Collection<Integer> collection = new ArrayList<>();
        // 添加0-49
        for (int i = 0; i < 50; i++) {
            collection.add(i);
        }

        // 移除10-49的数字
        collection.removeIf(e -> (e > 9 && e < 50));
        System.out.println(collection);// 输出[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    }

基于流操作集合

java8之后引入了Stream相关流操作java集合,通过流大大简化了对集合操作,关于这些流式操作,可以查看这篇文章☞ Stream入门学习,下面是基于流的一些简单演示:

@Test
    public void testIntStream() {
        Collection<Integer> collection = new ArrayList<>();
        Random random = new Random();

        for (int i = 0; i < 10; i++) {
            collection.add(random.nextInt(100));
        }
        System.out.println(collection);
        // collection存储的数值是包装类型,可以将其转换为IntStream
        IntStream intStream = collection.stream().mapToInt(e -> e);
        // intStream.forEach(System.out::println);
        System.out.println(collection.stream().mapToInt(e -> e).sum());
        // 输出最大值
        collection.stream().mapToInt(e -> e).max().ifPresent(System.out::println);
        // 输出最小值
        collection.stream().mapToInt(e -> e).min().ifPresent(System.out::println);
        // 统计大于50的数
        System.out.println(collection.stream().filter(e -> e > 50).count());
        // 原集合每一个值加1
        collection.stream().mapToInt(e-> e+1).forEach(System.out::println);
        // 排序
        collection.stream().mapToInt(e-> e).sorted().forEach(System.out::println);
        // 原数值每一个元素扩大2倍
        int[] ints = collection.stream().mapToInt(e -> e << 1).toArray();
        // 输出原数组
        System.out.println(Arrays.toString(ints));
        // 将数组转流
        IntStream stream = Arrays.stream(ints);
        // 输出流平均数
        System.out.println(stream.average().getAsDouble());
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java集合的定义与Collection类使用详解

    什么是集合? 概念:对象的容器,定义了对多个对象进行操作的常用方法.可实现数组的功能. 集合和数组的区别: 数组长度固定,集合长度不固定 数组可以存储基本类型和引用类型,集合只能引用类型 Collection : Collection体系结构: Collection的使用:包括增加元素.删除元素.遍历元素(两种方法)和判断 直接看代码: package com.collections; import java.util.ArrayList; import java.util.Collection

  • Java中Collection集合常用API之 Collection存储自定义类型对象的示例代码

    目录 Collection常用API Collection存储自定义类型对象 Collection常用API Collection集合API Collection是单列集合的祖宗接口,因此它的功能是全部单列集合都可以继承使用的. Collection有如下常用API 方法名称 说明 add(E e) 把给定的对象添加到当前集合中 clear() 清空集合中所有的元素 remove(E e) 把给定的对象在当前集合中删除 contains(Object obj) 判断当前集合中是否包含给定的对象

  • Java Collection集合的三种遍历方式详解

    目录 Collection遍历方式 迭代器遍历 foreach遍历 Lambda遍历 Collection遍历方式 Collection集合遍历的方式有三种: 迭代器foreach/增强for循环lambda表达式 迭代器遍历 迭代器概述: 遍历就是一个一个的把容器中的元素访问一遍. 迭代器在Java中是Iterator代表的,迭代器是集合的专用遍历方式. Collection集合获取迭代器的方: 方法名称 说明 iterator() 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引

  • java集合collection接口与子接口及实现类

    目录 概要 1 Collection接口的实现子类特性 2 通过实现子类ArrayList体现Collection接口方法 2.1 代码演示示例 3 集合的遍历:①使用Iterator(迭代器)②增强for循环遍历 3.1 代码示例 4 List相关解读 5 Set接口分析 Map接口及实现子类 结语 概要 集合概念:像数组一样是java的一个容器:和数组不同的是数组只能存同类型的数据,且长度定义之后就不可变,集合不仅,可以存多种类型的数据,而且还提供了增.删.改.查的方法: 集合分类:可以分为

  • java集合Collection实现类解析ArrayList LinkedList及Vector

    目录 前言 java集合Collection List实现类 Set实现类 代码实例 前言 平时开发经常会用到List等集合操作,在这里做一个小结 java集合Collection java里面集合分为两大类:List和Set,下面是类图信息 List实现类 List的实现类ArrayList,LinkedList,Vector的特性 /** * 有序集合List接口的实现类LinkedLIst,ArrayList,Vector,Stack *(1)ArrayList是最常用的List实现类,内

  • java集合Collection实现类解析ArrayList LinkedList及Vector

    目录 前言 java集合Collection List实现类 Set实现类 代码实例 前言 平时开发经常会用到List等集合操作,在这里做一个小结 java集合Collection java里面集合分为两大类:List和Set,下面是类图信息 List实现类 List的实现类ArrayList,LinkedList,Vector的特性 有序集合List接口的实现类LinkedLIst,ArrayList,Vector,Stack (1)ArrayList是最常用的List实现类,内部是通过数组实

  • Java 集合框架掌握 Map 和 Set 的使用(内含哈希表源码解读及面试常考题)

    目录 1. 搜索 1.1 场景引入 1.2 模型 2. Map 2.1 关于 Map 的介绍 2.2 关于 Map.Entry<K, V> 的介绍 2.3 Map 的常用方法说明 2.4 关于 HashMap 的介绍 2.5 关于 TreeMap 的介绍 2.6 HashMap 和 TreeMap 的区别 2.7 Map 使用示例代码 3. Set 3.1 关于 Set 的介绍 3.1 Set 的常用方法说明 3.3 关于 TreeSet 的介绍 3.4 关于 HashSet 的介绍 3.5

  • 在Java中Collection的一些常用方法总结

    Java中Collection的常用方法 1.add() 向中添加元素 add(100) 自动装箱操作,实际上是放进去的一个对象, Integer n = new Integer(100),实际上是把n放进了 Collection co = new ArrayList(); co.add(1); 2.addAll( Collection c ) 将指定集合中的所有元素添加到从集合中 因为ArryList类中重写了equals() 方法,所以两个集合比较相等. public class lxc {

  • Java集合的Collection接口和List接口详解

    目录 1集合的概念 2集合的父类Collection接口 2.1常用方法 2.2遍历 3List接口 3.1List接口常用方法 3.2遍历 4集合中元素的去重 总结 1集合的概念 把集合看做是一个容器,集合不是一个类,是一套集合框架,框架体系包含很多的集合类,java api提供了 集合存储任意类型(基本包装类型,引用类型) 集合对元素的增删查改操作起来非常方便的,专门提供很多方便操作的方法 开发中经常集合来操作数据的,开发地位比较高的,考虑对数据的操作效率上的问题 2 集合的父类Collec

  • Java集合框架之Collection接口详解

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组.链表.栈.队列.集合.哈希表等.学习Java集合框架下大致可以分为如下五个部分:List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections). Java的集合类主要由两个接口派生而出:Co

  • 深入浅出讲解Java集合之Collection接口

    目录 一.集合框架的概述 二.集合框架(Java集合可分为Collection 和 Map 两种体系) 三.Collection接口中的方法的使用 四.集合元素的遍历操作 A. 使用(迭代器)Iterator接口 B. jdk5.0新增foreach循环,用于遍历集合.数组 五.Collection子接口之一:List接口 List接口方法 ArrayList的源码分析: JDK 7情况下: JDK 8中ArrayList的变化: LinkedList的源码分析: Vector的源码分析: 六.

  • java 集合----Map、Collection

    接口:红色:实现类:黑色字体 一. Collection集合  Collection  |_____Set(HashSet)  |      |_____SortedSet(TreeSet)  |_____List(ArrayList,LinkedList,Vector )   Collection:集合层次中的根接口,JDK没有提供这个接口的实现类. List: 有序(按照放入的顺序).可以重复.有下标. Set:无序.不可以重复.无下标. SortedSet:是Set接口的子接口,Sorte

随机推荐