集合类(常见的集合类:Collection、List、Set、ArrayList、linkedList、Vector、HashSet、TreeSet)

一、集合类

    定义:一种为了对多个对象进行操作而进行存储的方式。

    1、与数组的区别:
      数组:可以存储对象,也可以存储基本数据类型,但是一次只能存储一种类型,数组长度固定。

      集合:只能存储对象,长度可变,可以存储不同类型的对象。

    集合众多的原因:每一种容器对数据的存储方式都有所不同,这个存储方式为:数据结构。

二、Collection

      1.增加对象:boolean add(Object object) 如果集合中没有object,那么添加它并返回true;
       如果集合中存在object(且该集合不能包含重复元素),则返回false。
       另外:集合中存储的都是对象的引用(地址)。(Object可以放入任何对象)

      2.获取长度:int size(): 返回此集合中的元素个数。

      3.删除元素:
        void clear(): 清楚集合中的所有元素(除非该集合不支持clear方法)。
        boolean remove(Object o): 删除集合中所有e.equals(e)==true的元素,并返回true。否则返回false。

                        (Arraylist中改写为:移除相等的首个元素)
        Boolean removeAll(Cellection c): 移除和集合c 的交集中的元素。

      4.判断元素:
        Boolean contains(Object o):判断集合中是否包含元素(对象)o。
        boolean containsAll(Collection c):判断集合c是否是调用集合的子集。

     5.交集: boolean retainAll(Cellection c): 仅保留和集合c的交集。

三、元素的取出(迭代器)

      迭代器: 就是一个Iterator接口的子类对象,封装了取出其绑定集合的元素的方式。

        步骤: 1、通过调用集合的 Iterator iterator()方法返回该集合的迭代器,
            2、将此迭代器赋值给 一个 Iterator 型对象引用。 
            3、通过此引用,调用迭代器的方法操作集合:
              1)、boolean hasNext():如果集合中任有元素可以迭代,则返回true。
              2)、Object next():返回迭代的下一个元素(列表中还在)。
              3)、void remove():从迭代器指向的集合中 移除 迭代器返回的最后一个元素。

        注意:你不能同时用迭代器和集合同时去操作同一组元素, 有可能会抛出并发异常。
        原因:迭代器已经创建, 之后通过集合方法操作的元素过程(比如说增加),迭代器并不知道集合做了什么操作,还是只能
           按照原来的元素列表操作,就会发生错误。

四、List 接口

      Collection 接口的子接口

      特点:元素是有序的, 而且元素可以重复。 该类集合中有索引(角标)。

      其特有的常见方法:

        1、凡是可以操作角标(索引的)的方法都是该体系特有的方法。

          增:
            void add(int index ,Object object);
            Boolean add(int index, Collection c);

          删:
            remove(index):返回了移除的元素。
          改:
            set(index, element):在指定角标放入指定元素,返回原来的元素。
          查:
            get(index):返回index上的元素
            subList(start,end):返回一个自己列表(依赖于原集合)

      注:List集合特有的迭代器: listIteretor(); 列表迭代器 (注意与iteretor区别)

      listIteretor:
        1、定义、解释。

            是iteretor的子接口。

            在进行迭代操作的时候,不能使用集合方法对同组元素进行操作(原因在iteretor讲解处)。
          而iteretor的操作方法又比较少(只有判断、查找、删除,没有添加),局限了对元素组的课操作性。
          所以在list集合中就定义了新的迭代器: listIteretor。

        2、listIteretor中新增的方法:
          1)、void add(): 在返回的元素后面的加入一个新元素
          2)、void set(object): 使用新元素替换返回的最后一个元素。
          3)、Boolean hasPrevious(): 逆向遍历列表(相对应: hasNext())

    list 集合在涉及到需要判断元素是否相同时,底层调用的都是equals方法。(contains、 remove方法等)

      list集合下,常见三大集合

            1、ArrayList:底层数据结构使用数组结构: 查询速度快。但是增删稍慢。(线程不同步,数组0.5倍延长)
            2、Linkedlist:底层使用链表数据结构: 增删块, 但是查询慢。
            3、Vector:底层是数组数据结构:查询赠删慢(线程同步,数组百分百延长)已经被ArrayList取代。

      Vector: 在1.2版本过后,便几乎被ArrayList取代,同步的。

        不过其有两个特有之处:

  
            1)、 在去方法中带有Element的方法是在1.1还没有Collection框架的时候特有的方法,与从list实现来的方法几乎一样。

            2)、 Vector除了有迭代器(iteretor、listIteretor )外,还有一个枚举(与iteretor类似)
                Enumeration en = v.elements(); 通过Vector对象创建一个枚举
                en.hasMornElements(); (类似迭代的hasNext())
                en.nextElement(); (类似迭代的Next())

      注意:枚举的所有功能都被迭代包含了,而且枚举方法名太长,不利于书写,所以,新的开发应当优先使用迭代而不是枚举。

      linkedList:

      底层使用链表数据结构。

      特有方法:
          1)、addFirst()从集合列表开头插入元素
          2)、addLast()从集合列表结尾插入元素(等效于add())
          3)、getFirst()拿到第一个元素,返回这个元素
          4)、getLast()拿到最后一个元素,返回这个元素
          5)、removeFirst()移除第一个元素,返回这个元素
          6)、removeLast()移除最后一个元素,返回这个元素

        (如果列表中没有元素,那么:3到6方法抛 空元素异常)

      注: 在1.6版本以后,新添加了获取和移除方法, 在空列表的时候,会返回null,不会发生异常。
          1)、peekFirst()获取 但 不移除 列表第一个元素,列表为空返回null

          2)、peekLast()获取 但 不移除 列表最后一个元素,列表为空返回null
          3)、pollFirst()获取 并 移除 列表第一个元素,列表为空返回null
          4)、pollLast()获取 并 移除 列表第最后一个元素,列表为空返回null
      

 五、Set 接口

      Collection 接口的子接口

      特点:元素是无序(存入和取出的顺序不一定一致)的,而且元素不能重复。 该类集合中没有索引。

      Set集合的功能和Collection是一致的。

      Set集合下常见的子类集合:
                    HashSet:底层数据结构式: 哈希表。

                    TreeSet:

      HashSet:
          特点:元素无序(存入和取出的顺序一定不一样),而且元素唯一,没有索引。

          底层数据: 底层使用哈希表作为数据结构。

          元素唯一性: 是通过元素的两个方法: hashCode 和 equals 来完成的。
              如果两个元素的HashCode值相同,就会判断equals是否为true。
              如果两个元素的HashCode值不同,就不会调用equals方法。

      注意:对于判断元素是否存在、删除等操作,都依赖于元素的hashCode、equals等方法。

      哈希表:给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,
        则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

      (哈希值与内存地址值之间的关系:默认的哈希值是内存地址值计算的哈希值,但是只是为了给人看的,真正在
      内存中还是依靠内存地址值来进行运算的,而不是哈希值)

TreeSet:

时间: 2024-12-14 05:34:06

集合类(常见的集合类:Collection、List、Set、ArrayList、linkedList、Vector、HashSet、TreeSet)的相关文章

List ArrayList LinkedList vector简介与区别

ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下: ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的List 特点:查询效率低,增删效率高 Vector: 底层用数组实现List接口的另一个类 特点:重量级,占据更多的系统开销 线程安全 一.同步性 ArrayList,LinkedList是不同步的,而Vestor

ArrayList,LinkedList,Vector,Set,Map,List,HashMap,HashTable

java集合类只要有两个接口派生而出.Collection和Map.  其中set和List分别代表无序集合与有序集合. 下图为Map体系集合数 HashSet具有一下特点: 不能保证排序顺列, HashSet不是同步的, 如果多个线程同时访问一个HashSet.假设有两个以上线程同时修改HashSet的值时,需要通过代码使其同步. 当向HashSet里面添加元素时,HashSet会调用该对象的HashCode()方法来获取HashCode值. 如果两个元素通过equals()方法比较返回tru

ArrayList LinkedList Vector

ArrayList是基于数组实现的,没有容量的限制. 在删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量. ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下: ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的List 特点:查询效率低,增删效率高 Ve

ArrayList/LinkedList/Vector源码分析

ArrayList public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable ArrayList继承了AbstractList,实现了List,表示ArrayList实现了线性表的所有功能,本质上是一个Object数组: ArrayList实现了RandomAccess接口,表示提供随机访问功能,A

java集合Collection的List ArrayList LinkedList 区别

概述 1.List的特点:线性顺序存储元素.元素可重复.可以存放null 2.ArrayList.LinkedList 一.List特点 如此图所示,List的存储形式是一个线性的结构,所以它可以重复,也可以存null.当然具体子类是怎么实现的,各有各个的形式. 二.关于List的方法 大部分这里都不会像介绍Collection接口那样逐一解释了.只讲部分使用时比较特殊点的. List<E> subList(int fromIndex, int toIndex) 待续....

比较Java数组,ArrayList,LinkedList,Vector 性能比较

public class PerformanceTester { public static final int TIMES=100000; public static abstract class Tester{ private String operation; public Tester(String operation){this.operation=operation;} public abstract void test(List<String> list); public Str

java基础(17)、集合类(1:Collection)

一. 什么是集合类? 二. Collection接口 2.1 Collection子接口(List接口和Set接口) 2.1 Collection的常用方法 三. 迭代器(Iterator) 3.1 关于迭代器 3.2 迭代其的用法 3.3 迭代器的简化:增强for循环 3.4 使用迭代器向集合添加元素 四. List接口 4.1 List接口的方法 4.2 List接口的实现类 4.3 List遍历的方法 4.4 并发修改异常 一. 什么是集合类? 放了方便对多个对象操作,需要一个能对对象存储

深入解析 Java集合类ArrayList与Vector的区别

集合类分为两个分支,Collection与Map,其中Collection接口继承了Iterator接口,继承Iterator接口的类可以使用迭代器遍历元素(即Collection接口的类都可以使用),今天我们从相同点.不同点.以及JDK源码等各个方面来深入解析下,底层使用数组实现的两个集合类:ArrayList与Vector的区别与联系 区别与联系: 1.ArrayList出现于jdk1.2,vector出现于1.0.两者底层的数据存储都使用的Object数组实现,因为是数组实现,所以具有查找

JAVA常见的集合类知识

结构图 Collection(接口) | ---------------------------------------------------------------------- |                                                                                                      | List  (接口,可相同元素,有序)                                  

Java——(五)Collection之List集合、ArrayList和Vector实现类

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.List集合 List集合代表一个元素有序.客重复的集合,集合中每个元素都有其对应的顺序索引.List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素.List集合默认按元素的添加 顺序设置元素的索引,例如第一次添加的元素索引为0,第二次添加的元素索引为1...... 1.List接口和ListIterator接口 List作为Collection接口的子接口,所以可以使用Co