Collection集合总结

一、集合的概述

  1、集合的由来

  Java是面向对象的语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储。而我们要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,而在我们Java的基础知识里,我们有哪些容器类型的呢?答案是数组和StringBuffer两种,但是呢?StringBuffer的结果是一个字符串,不一定满足我们的要求,所以我们只能选择数组,这就是对象数组。而对象数组又不能适应变化的需求,因为数组的长度是固定的。这个时候,为了适应变化的需求,Java就提供了集合类供我们使用。

  2、集合和数组的区别

  既然提到了数组和集合,那么我们就说一下集合和数组的区别:

  A:长度区别

    数组的长度固定

    集合的长度可变

  B:内容不同

    数组存储的是同一种类型的元素

    集合可以存储不同类型的元素

  C:存储元素的数据类型不同

    数组可以存储基本数据类型,也可以存储引用数据类型

    集合只能存储引用数据类型

二、Collection集合的框架体系

  1、Collection集合体系

    Collection集合是单列集合的顶层接口。Collection表示一组对象,这些对象也称为Collection的元素。该集合的数据结构(简单记就是数据的存储方式)对集合元素有效。

    Collectoin集合的功能概述:

      1)添加功能

          boolean add(Object obj):添加功能

          boolean addAll(Collection c):添加一个集合的元素

      2)删除功能

          void clear():移除所有元素

          boolean remove(Object obj):移除一个元素

          boolean removeAll(Collection c):移除一个集合的元素(只要有一个元素移除了就返回true)

      3)判断功能

          boolean contains(Object obj):判断集合中是否包含指定的元素

          boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(只有包含指定集合中所有的元素才叫包含)

          boolean isEmpty():判断集合是否为空(指集合的数据元素为空)

      4)获取功能

          Iterator iterator():迭代器,集合专有的遍历方式

      5)长度功能

          int size():元素的个数

      6)交集功能

          boolean retainAll(Collection c):两个集合中都有的元素(假设有两个集合A、B,A对B做交集,最终的结果保存在集合A中,集合B不变,返回值表示的是集合A是否发生过改变)

      7)把集合转换为数组

          Object[] toArray():把集合转成数组,可以实现集合的遍历

  Collection集合有两个子接口List和Set。

  2、List集合

    List集合的特点:有序(指存储和取出元素的顺序一致)、存储元素可重复

    List集合的特有功能:

      1)添加功能

        void add(int index,Object element):在指定位置添加元素

      2)获取功能

        Object get(int index):获取指定位置的元素

      3)列表迭代器

        ListIterator listIterator():迭代所有的元素

        ListIteraror listIterator(int index):从指定位置开始迭代元素

      4)删除功能

        Object remove(int index):根据索引删除元素,返回被删除的元素

      5)修改功能

        Object set(int index,Object element):根据索引修改元素,返回被修改的元素

   List集合有ArrayList、Vector和LinkedList三个常用子类。

  3、List集合的子类

   List集合的子类特点:

      ArrayList的底层数据结构是数组,查询快,增删慢,线程不安全,效率高

      Vector的底层数据结构是数组,查询快,增删慢,线程安全,效率低

      LinkedList的底层数据结构是链表,查询慢,增删快。线程不安全,效率高

    Vector的特有功能:

      1)添加功能

        public void addElement(Object obj)

      2)获取功能

        public Object elementAt(int index)

        public Enumeration elements()

    LinkedList的特有功能:

      1)添加功能

        public void addFirst(Object obj)

        public void addLast(Object obj)

      2)获取功能

        public Object getFirst()

        public Object getLast()

      3)删除功能

        public Object removeFirst()

        public Object removeLast()

  4、Set集合

    Set集合的特点:无序(指元素的存储和取出顺序不一致)、存储元素唯一

    Set集合有HashSet和TreeSet两个常用子类。

  5、Set集合的子类

    1)HashSet类的特点:

      HashSet类不保证Set的迭代顺序,特别是它不保证该顺序恒久不变。

      注意:虽然Set集合的元素是无序的,但是作为集合来说,它肯定有它自己的元素存储顺序。而如果你的顺序恰好和它的存储顺序一致,这代表不了有序,你可以多存储一些数据,看效果。

    HashSet类的底层数据结构是哈希表。而哈希表保证元素的唯一性依赖于两个方法:int hashCode()和boolean equals(Object obj)

    用HashSet存储元素的执行顺序:

      首先比较hashCode()值是否相同

        是:继续执行equals(),看其返回值

            是true:说明元素重复,不添加

            是false:就直接添加到集合

        否:就直接添加到集合

    HashSet类有一个子类LinkedHashSet,LinkedHashSet存储元素的特点是有序、唯一

      LinkedHashSet的底层数据结构由链表和哈希表组成,由链表保证元素有序,由哈希表保证元素唯一。

    

    2)TreeSet类的特点

      TreeSet类底层数据结构是红黑树(是一种自平衡的二叉树)。

      TreeSet类如何保证元素唯一性呢?

        根据比较的返回值是否是0来决定

      TreeSet类如何保证元素的排序呢?

        a:自然排序(元素具备比较性)

          让元素所属的类实现Comparable接口

        b:比较器排序(集合具备比较性)

          让集合接收一个Comparator的实现类对象

  

     

  

时间: 2024-10-10 23:38:40

Collection集合总结的相关文章

Java基础知识强化之集合框架笔记04:Collection集合的基本功能测试

1. Collection集合的基本功能测试: 1 package cn.itcast_01; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 6 /* 7 * 集合的由来: 8 * 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储. 9 * 而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识

遍历Collection集合中的6种方法:

下面的代码演示了遍历Collection集合的6种方法,注意Collection集合的遍历远不止于增强for循环,和迭代器两种. 代码如下: 1 package com.qls.traverse; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.Collections; 6 import java.util.Enumeration; 7 import java.util.Iterator;

Java基础知识强化之集合框架笔记05:Collection集合的遍历

1.Collection集合的遍历 Collection集合直接是不能遍历的,所以我们要间接方式才能遍历,我们知道数组Array方便实现变量,我们可以这样: 使用Object[]  toArray():把集合转化成数组,可以实现集合的遍历 代码实现: 1 package cn.itcast_01; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 6 /* 7 * 集合的遍历.其实就是依次获取集合中的每一个元素. 8

【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)

两个月之前准备软考时,简单的从理论上总结了最经常使用的数据结构和算法,比方:线性表,链表,图.在进行java开发时,jdk为我们提供了一系列对应的类来实现主要的数据结构.jdk所提供的容器API位于java.util包内.本文主要是通过简单的介绍Collection集合,向读者简单阐述各个类的基本定义以及其作用,为后面的学习做一下铺垫. 首先,我们先看一下Collection集合的基本结构: 1.Collection接口 Collection是最基本集合接口,它定义了一组同意反复的对象.Coll

Collection集合 和 Map

Collection |--List:元素是有序的,元素可以重复.因为该集合体系有索引.|--ArrayList:底层的数据结构使用的是数组结构.特点:查询速度很快.但是增删稍慢.线程不同步. List集合特有的迭代器.ListIterator是Iterator的子接口. List两种取出方式:1循环,2迭代 |--LinkedList:底层使用的链表数据结构.特点:增删速度很快,查询稍慢.线程不同步.|--Vector:底层是数组数据结构.线程同步.被ArrayList替代了.因为效率低. 在

JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的文章,大多都是以罗列记忆点的形式书写的,没有谈论实现细节和逻辑原理.作为个人笔记无可厚非,但是并不利于他人学习.希望能通过这种比较“费劲”的讲解,帮助我自己.也帮助读者们更好地学习Java.掌握Java. 无论你跟我一样需要应聘,还是说在校学生学习Java基础,都对入门和进一步启发学习有所帮助.(关

Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)

两个月之前准备软考时,简单的从理论上总结了最常用的数据结构和算法,比如:线性表,链表,图.在进行Java开发时,jdk为我们提供了一系列相应的类来实现基本的数据结构.jdk所提供的容器API位于java.util包内.本文主要是通过简单的介绍Collection集合,向读者简单阐述各个类的基本定义以及其作用,为后面的学习做一下铺垫. 首先,我们先看一下Collection集合的基本结构: 1.Collection接口 Collection是最基本集合接口,它定义了一组允许重复的对象.Collec

泛型限定的练习。获取Collection集合中的最大值

/** *    泛型限定的练习.★★★★★ 获取Collection集合中的最大值.(解决问题按照一下的要求做) 1 先定义了一个方法中明确具体元素类型的getMax_1. 2 由于getMax_1无法获取其他类型元素的最大值.提高扩展性,操作所有对象. 就升级为了Object .getMax_2 3 因为定义成Object,什么类型都可以接收,容易出现运行时的ClassCastException 所以使用泛型,对要操作的元素进行类型的限定. 思路: 1.获取元素最大值的方法,通常是拿一个对象

Collection集合 总结笔记

2:Set集合(理解)     (1)Set集合的特点         无序,唯一     (2)HashSet集合(掌握)         A:底层数据结构是哈希表(是一个元素为链表的数组)         B:哈希表底层依赖两个方法:hashCode()和equals()           执行顺序:             首先比较哈希值是否相同                 相同:继续执行equals()方法                     返回true:元素重复了,不添加