java之集合概述

集合也称容器:从大的类别分成两类:Collection和Map,也即:单列和双列列表。

java编程思想中一张图说明该体系的整体结构:其中黑色着重的类是经常使用的类。

1 Collection

Collection:作为单列集合的根接口。该类集合的继承体系如下:

Collection分为两大类:List和Set



1)List:

特点:有序的 collection(也称为序列);列表通常允许重复的元素。

      List 接口提供了特殊的迭代器,称为 ListIterator,除了允许 Iterator 接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问。

常用子类实现:Vector/ArrayList/LinkedList

三者之间的区别

  ArrayList:底层结构是数组,查询快,增删慢,实现是不同步的,线程不安全,效率高。

  LinkedList:底层是链表,查询慢,增删快,实现不同步,线程不安全,效率高。

  Vector:底层数据结构是数组,查询快,增删慢,实现同步,线程安全,效率低(即使是线程安全的也不怎么使用,因为Collections集合工具类提供方法可使线程不安全的集合实现线程安全,此类经常由ArrayList集合取代)



2)Set:

特点:无序,列表中不允许重复的元素(无序:是指存储集合和从集合中取出的顺序是不一致的)

常用子类实现:HashSet和TreeSet

HashSet:

  特点

  底层实现不是同步的,线程不安全。
  通过查看源码:HashMap底层就是HashMap(即底层数据结构是哈希表),只是进行了包装。
  而哈希表结构底层依赖于hashCode()和equals()方法保证元素的唯一性。

实现唯一性:

  对于基本包装类型:基本类型对象的包装类已经实现了equals()和hashCode()方法,故可以保证元素的唯一性。

  String类:重写了equals()和hashCode()方法,也可以保证唯一性。

  自定义类:需要重写Object类中equals()方法和hashCode()方法

  其常用子类:
     LinkedHashSet:

  特点:具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现非同步。

     此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表

       此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。

       其数据结构是哈希表和链表结合,既保证唯一性同时又可以有序。(哈希表保证元素唯一性;链表保证有序)
       再次强调这里的有序是存取的顺序一致。。。。

TreeSet:

 特点:

  底层实现是非同步的,线程不安全。

  查看源码,其底层是包装了TreeMap集合,数据结构是红黑树即平衡二叉树。

  而平衡二叉树的特点:能够对元素进行排序,排序方式:自然排序和比较器排序

  此处的排序(存储元素的位置排序)是和上面讲的有序(插入和取出的顺序一致)不是一个概念。

   实现排序:

自然排序:在创建集合时,使用不带比较器的构造函数,一般使用无参构造。

       对于自定义存储元素对象,要想实现自然排序,应该实现Comparable<T>接口,实现其唯一的方法:int compareTo(T o)。

      而对于基本类型装箱对象(比如Integer/Character等),因为其本身已经实现了该接口,所以直接可以使用就能实现自然排序。

       String类:其已经实现了Comparable接口,也实现了其compareTo方法,故可以直接存取,即可实现自然排序。

  比较器排序:如果要使用比较器排序,需要使用带参构造,往构造函数中传入一个比较器Comparator子类对象。一般有两种方式:

    内部类方式:在创建集合对象时,使用内部类实现一个比较器对象,后面会有实例。

    外部类方式:新建一个类,实现Comparator<T>接口,并且实现其中的方法:int compare(T  o1,T  o2),在创建集合之前创建这个类的实例,传入集合带参构造。

Colllection集合的遍历一般有三种方式:

  1)迭代器

  2)增强for

  3)普通for



2 Map

特点:

  存放键值对,依赖于键

  一个映射不能包含重复的键;每个键最多只能映射到一个值(键唯一,值可重复)

   其实现子类有的允许null键和null值,有的不允许null键和null值

常用子类

  HashMap  TreeMap   LinkedHashMap    ConcurrentHashMap(比较流行在多线程)    Hashtable(已经不怎么用了)

HashMap: 集数组和链表(即哈希表)的一种集合,底层实现依赖于key的hashcode()以及key的equals()方法
      插入一个键值也即一个Entry,首先计算h=h(key.hashcode())即key的hashcode的散列函数,然后根据h值在数组中找到对应的索引。
         如果该位置已经有元素,则需要和该索引处的链表的每一个元素进行比较。

Hashtable: 

     出现在JDK1.0,早于集合,后被修改实现Map接口正式加入集合。

       此类实现了哈希表,底层实现是同步的,故线程安全,不过效率低。

     已经有HashMap取代,一般不用。

ConcurrentHashMap:

      位于java.util.concurrent包下,很明显用于多线程。

      虽然该类也是同步的,但是其锁的密度和哈希表不同,其效率比哈希表高,当然和HashMap相比效率有所下降,但是在高并发情况下,其保证了安全性。

      其底层同步源码实现也是其一大亮点。

HashMap和Hashtable的区别:
  HashMap用来替代Hashtable。除了下面两点不同,其余差不多
  1)Hashtable是同步的,线程安全,效率低。而HashMap线程不安全,效率高。
  2)HashMap允许null键和null值,而Hashtable不允许null键和null值

遍历方式:

  由键找值:

    1)获取键的集合:Set<T>  keySet()

    2)遍历该键的Set集合,根据键查找对应的值:V  get(Object  K)

  获取键值对集合:

    1)获取键值对Set集合:Set<Map.Entry<K,V>>  entrySet()

    2)遍历该Set集合:其元素类型是 Map.Entry<K,V> ,集合中的每一个元素类型都是Map.Entry<K,V>。

    3)根据这个类中的:K  getKey()  和  V  getValue()方法分别获取键和对应的值。



java之集合概述

时间: 2024-10-12 00:51:56

java之集合概述的相关文章

Java基础知识强化之集合框架笔记38:Set集合之Set集合概述和特点

1. Set集合概述和特点 Collection            |--List                     有序(存储顺序和取出顺序一致),可重复            |--Set                     无序(存储顺序和取出顺序不一致),唯一  HashSet:它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变. 注意:虽然Set集合的元素无序,但是,作为集合来说,它肯定有它自己的存储顺序, 而你的顺序恰好和它的存储顺序一致,这代表不了有序,你可以

java高级特性之集合概述

java中的集合概述 map 接口 总结 java集合学习 1 java中存储数据的方式 1 数组 (基本数据类型+引用数据类型).2 集合(对象) 数组存储数据的缺点1:数组一旦创建,长度固定 2:数组不能直接确定有效元素的个数 java中的集合概述: java集合接口:Collection 接口 和Map 接口 (Collection接口 表示不按照添加顺序存放对象的集合,而且集合内的元素可以重复即 无序可重复 集合,它是List,Set,Queue..接口的父接口) Collection

跟王老师学集合(一)为什么要使用集合和Java集合概述

为什么要使用集合和Java集合概述 主讲人:王少华  QQ群号:483773664 学习目标 1 理解为什么使用集合 2 掌握Java集合框架 一.使用数组缺陷: 在电子宠物系统中,如果想存储多个宠物信息,可以使用数组来实现.例如,可以定义一个长度50的Dog类型的数组,存储多个Dog对象的信息.但是采用数组存在以下一些明显的缺陷: 数组长度固定不变,不能很好适应元素数量动态变化的情况.若要存储大于50个狗狗的信息,则数组长度不足:若只存储20个狗狗的信息,则造成内存空间浪费 可通过数组名.le

《java集合概述》

1 JAVA集合概述: 2 3 Collection: 4 |---List有序的:通过索引就可以精确的操作集合中的元素.元素是可以重复的. 5 List提供了增删改查的动作. 6 增加add(element) add(index,element); 7 删除remove(element) remove(index); 8 修改set(index,element); 9 查询get(index); 10 |---Vector:是可增长的数组结构.是同步的.增和查速度都慢,效率很低.目前不在使用.

Java中集合的概述

一.集合和数组的区别 1.数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 2.集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用. 二.Java中集合框架图解与说明 1.Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类.但是却让其被继承产生了两个接口,就是Set和List.Set中不能包含重复的元素.List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式.常用方法如下

Java 集合学习--集合概述

一.集合框架 集合,通常也叫容器,java中有多种方式保存对象,集合是java保存对象(对象的引用)的方式之一,之前学习的数组是保存对象的最有效的方式,但是数组却存在一个缺陷,数组的大小是固定的,但是往往我们在写程序的时候,并不知道需要保存多少个对象,或者是否需要用更复杂的方式来存储对象.而java提供集合类来解决这个问题.java中集合大家族的成员实在是太丰富了,有常用的ArrayList.HashMap.HashSet,也有不常用的Stack.Queue,有线程安全的Vector.HashT

Map集合概述和特点

A:Map集合概述和特点(Set底层依赖的是Map) 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接口的不同 Map是双列的(是双列集合的根接口),Collection是单列的(是单列集合的根接口) Map的键唯一,Collection的子体系Set是唯一的 Map集合的数据结构值针对键有效,跟值无关;如:TreeMap:键是用二叉树算法,HashMap:键是hash算法, Collection集合的数据结构是针对元素有效 图解:

Java基础——集合(一)——集合体系、Collection集合

一.集合概述 Java是一种面向对象语言,如果我们要针对多个对象进行操作,就必须对多个对象进行存储.而数组长度固定,不能满足变化的要求.所以,java提供了集合. 特点 1.        长度可以发生改变 2.        只能存储对象 3.        可以存储多种类型对象 与数组区别 数组 集合 长度 固定 可变 存储元素 基本类型/引用类型 引用类型 元素类型的一致性 必须一致 可以不一致 二.集合体系 集合作为一个容器,可以存储多个元素,但是由于数据结构的不同,java提供了多种集

java容器简要概述

java中集合框架的概述 java集合类主要用于保存对象的. 常用的集合对象: Colletion接口,Collection接口是集合中的顶层容器,表示的是一组对象,它的下面有两个子接口List接口和Set接口. List接口:元素有序,可以重复. ArrayList:底层以数组进行存储元素,存储在ArrayList中的元素是有序的,当容量不足时可以自动扩容. LinkedList:底层以链表进行存储元素,插入和删除效率高. Set接口:元素无序,不可以重复. HashSet:底层是基于散列表实