美文网首页
Java基础-集合概述

Java基础-集合概述

作者: Martain | 来源:发表于2020-07-27 20:03 被阅读0次

面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。

数组的弊端

数组初始化以后,长度就确定了,不便于扩展;数组声明的类型,就决定了进行元素初始化时的类型,数组中提供的属性和方法少,不便于进行添加、删除、插入等操作, 且效率不高。

Java集合的组成

Java-base-collection-impl

图解:

  • Collection接口:单列集合,用来存储一个一个的对象。
  • List接口:存储有序的、可重复的数据。也称为“动态”数组。
  • Set接口:存储无序的、不可重复的数据 。高中讲的“集合”
  • Map接口:双列集合,用来存储一对(key - value)一对的数据 -->高中函数:y = f(x)

java集合Collection是一个接口类,它是ListSetMap的父接口,Collection接口中定义了许多方法,JDK中不提供该接口的任何直接实现,而是提供更具体的子接口的实现。在 Java5 之前, Java 集合会丢失容器中所有对象的数据类型,把所有对象都当成 Object 类型处理; 从 JDK 5.0 增加了泛型以后, Java 集合可以记住容器中对象的数据类型。

Collection的接口方法

方法签名 方法介绍
add(Object obj) 添加单个元素
addAll(Collection collection) 添加所给集合中的所有元素
clear() 清空集合
isEmpty() 判断是否是空集合
contains(Object obj) 判断集合中是否包含某个元素(通过元素的equal方法来判断是否是同一个对象)
containsAll(Collection col) 判断集合中是否包含给定集合中的元素(也是用equals来判断是否相等)
remove(Object obj) 移除某个元素(通过equals方法参照元素)
removeAll(Collection col) 取当前集合的差集
equals(Collection col) 判断与集合是否相等
toArray() 转换成对象数组
hashCode() 获取元素的哈希值
Iterator() 返回迭代器对象

Iterator迭代器

Collection接口也继承了Iterable,所以可以使用迭代器来遍历对象。

  • 内部方法包含hasNext()next()
  • 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
  • 内部定义了remove(),可以在遍历的时候,删除集合中的元素。此方法不同于集合直接调用remove()
  // 创建集合
  Collection coll = new ArrayList();
  coll.add(123);
  coll.add(456); 
  coll.add(new String("Tom"));
  coll.add(false); 
    // 遍历集合
  iterator = coll.iterator();
  while (iterator.hasNext()){
    System.out.println(iterator.next());
  }

List接口

List接口是用来存储有序的、可重复的数据,我们常常用来当成“动态”数组。它有三个实现类,分别是ArrayListLinkedListVector,它们的实现方式和数据结构均有所不同,所以合适使用的的场景也不一样。

实现类 时间 描述
Vector JDK1.0 作为List接口的古老实现类;线程安全的,效率低;底层使用Object[] elementData存储
ArrayList JDK 1.2 作为List接口的主要实现类;线程不安全的,效率高;底层用Object[] elementData存储
LinkedList JDK1.2 对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储

ArrayListLinkedListVector三者的异同?

​ 三个类都是实现了List接口,存储数据的特点相同:存储有序的、可重复的数据.不同点就是各自底层的数据结构不同,以及他们的多线程安全性也不同。

Set接口

Set接口是用来存储无序、不可重复的数据。它有三个实现类:HashSetLinkedHashSetTreeSet

实现类 时间 描述
HashSet JDK1.2 作为Set接口的主要实现类;线程不安全的;可以存储null值
LinkedHashSet JDK 1.2 作为HashSet的子类;遍历其内部数据时,可以按照添加的顺序遍历
TreeSet JDK1.2 可以按照添加对象的指定属性,进行排序或自定义排序。

HashSet特点:

  • 无序性:不等于随机性。存储的数据在底层数组中并非按照数组索引的顺序添加,而是根据数据的哈希值决定的。
  • 不可重复性:保证添加的元素按照equals()判断时,不能返回true.即:相同的元素只能添加一个。

Map接口

Map接口是用来存储键值对的,它是一个双列数据结构。

他的实现类有HashMapLinkedHashMapTreeMapHashtable以及Properties

实现类 时间 描述
Hashtable JDK1.0 作为古老的实现类;线程安全的,效率低;不能存储null的key和value
Properties JDK 1.0 作为Hashtable的子类;常用来处理配置文件。key和value都是String类型
HashMap JDK1.2 作为Map的主要实现类;线程不安全的,效率高;存储null的key和value
LinkedHashMap JDK 1.2 保证在遍历map元素时,可以按照添加的顺序实现遍历。原因:在原有的HashMap底层结构基础上,添加了一对指针,指向前一个和后一个元素。
TreeMap JDK 1.2 保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序

Map中的key:无序的、不可重复的,使用Set存储所有的key ---> key所在的类要重写equals()和hashCode() (以HashMap为例)

  • Map中的value:无序的、可重复的,使用Collection存储所有的value --->value所在的类要重写equals()一个键值对:key-value构成了一个Entry对象。

  • Map中的entry:无序的、不可重复的,使用Set存储所有的entry

Collections工具类

Collections 是一个操作SetListMap 等集合的工具类,Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法。

排序操作

方法名 方法简介
reverse(List) 反转 List 中元素的顺序
shuffle(List) 对 List 集合元素进行随机排序
sort(List) 根据元素的自然顺序对指定 List 集合元素按升序排序
sort(List, Comparator) 根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
swap(List, int, int) 将指定 list 集合中的 i 处元素和 j 处元素进行交换

查找/替换

方法名 方法简介
Object max(Collection) 根据元素的自然顺序,返回给定集合中的最大元素
Object max(Collection, Comparator) 根据 Comparator 指定的顺序,返回给定集合中的最大元素
Object min(Collection) 根据元素的自然顺序,返回给定集合中的最小元素
Object min(Collection, Comparator) 根据 Comparator 指定的顺序,返回给定集合中的最小元素
int frequency(Collection, Object) 返回指定集合中指定元素的出现次数
void copy(List dest,List src) 将src中的内容复制到dest中
replaceAll(List list,Object oldVal,Object newVal) 使用新值替换List 对象的所有旧值

同步控制

Collections类中提供了多个 synchronizedXxx()方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题

方法名 方法简介
Collection synchronizedCollection(Collection c) 包装集合返回一个线程安全的集合
Set synchronizedSet(Set s) 包装Set返回一个线程安全的Set
List synchronizedList(List list) 包装List返回一个线程安全的List
Map synchronizedMap(Map m) 包装Map返回一个线程安全的Map

相关文章

  • Java基础-集合概述

    面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存...

  • JavaSE集合类

    JavaSE集合类 概述 Java中集合类概述Java中数组与集合的比较Java中集合框架层次结构 Collect...

  • Java基础-集合类-概述

    Java工程师知识树[https://www.jianshu.com/p/db77d19a25f6] / Ja...

  • 一篇文章,全面解读Android面试知识点

    Java Java基础 Java集合框架 Java集合——ArrayList Java集合——LinkedList...

  • JAVA基础-集合

    JAVA基础-集合 1.概述 JAVA容器分为两大类:Collection接口的子接口包括:List接口和Set接...

  • Java基础——集合体系Map详解

    Java基础——集合体系Map详解 上文中我们了解了集合体系中的单列集合:Java基础——集合以及Java集合——...

  • Java集合

    1、java 集合概述 Set :无序、不可重复的集合。 List : 有序、重复的集合。 Queue:Java ...

  • 集合系列(一):集合框架概述

    集合系列(一):集合框架概述 Java 集合是 Java API 用得最频繁的一类,掌握 Java 集合的原理以及...

  • Chapter 6 . 集合

    阅读原文 Chapter 6 . 集合 6.1 Java 集合概述 l. Java 集合可分为 Collecti...

  • ArrayList源码阅读

    概述 ArrayList是JAVA集合类中一个最为基础最为使用广泛的集合,本文将基于JDK1.8来解读ArrayL...

网友评论

      本文标题:Java基础-集合概述

      本文链接:https://www.haomeiwen.com/subject/cfetrktx.html