`
hanwesley
  • 浏览: 59457 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Collection集合接口

阅读更多

Collection集合接口

java集合结构图

java集合结构简图

 

集合对象:用于管理其他若干对象(非引用地址)的对象

1.1 List接口: 有顺序的,元素可以重复(两有)
遍历:方式一:for循环按下标取各元素,方式二:迭代
排序:
Comparable Comparator Collections.sort()
实现类:

ArrayList:底层用数组实现的List
特点:查询效率高,增删效率低 轻量级 线程不安全

LinkedList
:底层用双向循环链表 实现的
List
特点:查询效率低,增删效率高

Vector:
底层用数组实现List接口的另一个类

特点:重量级,占据更多的系统开销 线程安全

ArrayListVector的区别:

ArrayList不支持线程同步,高效,不考虑线程并发时用;

Vector支持线程同步,效率较低,在考虑线程并发时用,保证线程安全

1.2 Set接口:无顺序的,元素不可重复(值不相同)
遍历:调自身迭代方法iterator(),返回一个Iterator对象,其中iterator()方法是由内部类实现的。

排序:SortedSet接口
实现类:

HashSet:采用哈希算法(底层实际上是HashMap)来实现Set接口
唯一性保证:根据hashcode

SortedSet:对一个Set排序
TreeSet
:在元素添加的同时,进行排序。也要给出排序规则

唯一性保证:默认调用java.lang.Comparable接口中的compareTo方法,返回为0,就可以认定两个对象中有一个是重复对象。

1.3 Map<key,value> key:唯一,不可重复 value:可重复
遍历:先迭代遍历key的集合,再根据key得到
value
实现类:

HashMap:轻量级 线程不安全 允许key或者valuenull,可同时为空
Hashtable
:重量级 线程安全 不允许key或者value
null
Properties
Hashtable的子类,keyvalue都是String

SortedMap接口:元素自动对key排序
TreeMap

1.4 五个最常用的集合类之间的区别和联系
1ArrayList: 元素单个,效率高,多用于查询
2
Vector: 元素单个,线程安全,多用于查询

3
LinkedList:元素单个,多用于插入和删除

4
HashMap: 元素成对,元素可为空

5
HashTable: 元素成对,线程安全,元素不可为空

ArrayList底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。
LinkedList
底层是双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置)。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。双向循环链表的查询效率低但是增删效率高。因此LinkedList经常用在增删操作较多而查询操作很少的情况下:队列(FIFO)和堆栈(LIFO)
注:1ArrayListLinkedList在用法上没有区别,但功能上还是有区别的。

2
、使用栈时不提供方法让不是最后一个元素的元素获得出栈的机会。

面试经验(知识点):
java.util.stack
stack即为堆栈)的父类为Vector。可是stack的父类是最不应该为Vector的。因为Vector的底层是数组,且Vectorget方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。

对于堆栈和队列只能用push/pop方法。

实现栈一定要用LinkedList。在JAVA1.5中,collectionqueue来实现队列。

HashSet实现类:
HashSet
中元素是无序的(无序指数据的添加顺序和排列顺序不同),且元素不可重复。
HashSet
底层用的是数组。
当向数组中利用add(Object o)添加对象的时候,系统先找对象的hashCode

int hc=o.hashCode();
返回的hashCode为整数值。

Int I=hc%n;
n为数组的长度),取得余数后,利用余数向数组中相应的位置添加数据,以n6为例,如果I=0则放在数组a[0]位置,如果I=1,则放在数组a[1]位置。如果1位置已经有元素,则调用equals()比较,如果返回值为true,则说明数据重复。如果equals()返回的值为false,则再找其他的位置进行比较。这样就导致两个相同的对象有可能重复地添加到数组不同位置中,因为他们的hashCode不同。如果我们能够使两个相同的对象具有相同hashcode,才能在equals()返回为真。

因为String类是自动覆盖的,所以当比较String类的对象的时候,就不会出现有两个相同的string对象的情况。
结论:如将自定义类用hashSet来添加对象,一定要覆盖hashcode()equals(),覆盖的原则是保证当两个对象hashcode返回相同的整数,而且equals()返回值为True。如果没有设定equals(),就会造成返回hashCode虽然结果相同,但在程序执行的过程中会多次地调用equals(),从而影响程序执行的效率。

使用hashSet的优点:
hashSet
的底层是数组,其查询效率非常高。而且在增加和删除的时候由于运用的hashCode的比较开确定添加元素的位置,所以不存在元素的偏移,所以效率也非常高。因为hashSet查询和删除和增加元素的效率都非常高。

但是hashSet增删的高效率是通过花费大量的空间换来的:因为空间越大,取余数相同的情况就越小。HashSet这种算法会建立许多无用的空间。

使用hashSet类时要注意,如果发生冲突,就会出现遍历整个数组的情况,这样就使得效率非常的低。

1.5 比较
Collections
工具类(工具类——全是static 方法)
TreeSet,TreeMap
过滤重复都是通过实现Comparable接口或实现一个比较器来实现的

0
0
分享到:
评论

相关推荐

    Collection集合基本练习1

    【Collection集合基本练习1】是Java编程中关于集合框架的一个基础练习,主要涉及以下几个知识点: 1. **Collection接口**:Collection是Java集合框架的顶级接口,它定义了集合的基本操作,如添加、删除、判断元素等...

    Collection集合继承结构图.pdf

    Collection集合类继承结构图向我们展示了Collection接口与其他接口和类之间的关系。 在Java集合框架中,Collection接口位于顶层,它直接继承自Iterable接口。Iterable接口允许对象成为“for-each”循环的目标,它...

    Java集合框架Collection接口.pdf

    ### Java集合框架Collection接口详解 #### 一、Java集合框架简介 Java集合框架(Java Collection Framework)是Java标准库中的一个重要组成部分,它提供了一系列用于存储和操作数据集合的接口和实现类。这些接口和...

    php中的Collection集合类

    总的来说,PHP中的`Collection`集合类是组织和操作数据的有效工具,它不仅提供了统一的数据接口,还能通过扩展实现更高级的功能,从而提高代码的灵活性和复用性。合理地利用`Collection`,可以使代码更加模块化,...

    Java容器框架 collection集合

    ### Java容器框架 Collection集合 #### 一、基本概念 Java容器类库主要目的是为了存储对象,根据不同的数据结构,可以将其划分为两个主要的概念:**Collection** 和 **Map**。 - **Collection**:这是一个单一...

    Collection(接口,超类,基类).xmind

    Collection集合的剖析和底层的实现类以及不同实现类之间的区别,着重于底层的数据结构和存储方式

    2023某厂面试题.doc

    本文档总结了多个 Java 相关面试题,涵盖 TCP 和 UDP 的区别、Dubbo 和 Dubbox 的区别、ArrayList 和 LinkedList 的区别、Collection 集合接口和 Map 接口的关系、Spring 的内部 bean、Zookeeper 框架、Java 异常的...

    Collection接口中的常用方法

    在Java编程语言中,`Collection`接口是集合框架的基础,它定义了一组对象的无序组合。此接口提供了对集合的基本操作,并被其他具体集合类如`ArrayList`、`LinkedList`等所实现。下面将详细介绍`Collection`接口中的...

    集合 Collection

    Java集合框架(Collection Framework)是Java编程语言中一个重要的组成部分,它为开发者提供了多种数据结构,以便更加高效、灵活地管理对象集合。Java集合框架主要包括三种类型的集合:List、Set和Map。此外,它还...

    使用Iterator接口遍历集合元素

    Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提供了遍历 Collection 集合元素的统一编程接口。 Iterator 接口定义了三个方法:boolean hasNext()、Object next() 和 void remove()。hasNext()...

    11.集合框架001-Collection接口17-19

    本课程主要聚焦在集合框架中的`Collection`接口,这是所有单值集合的顶级接口,是Java集合框架的基石之一。下面将详细解析`Collection`接口以及与其相关的知识点。 首先,我们来谈谈`Collection`接口。它是`java....

    collection集合类

    ### Collection集合类详解 #### 一、概述 `Collection`集合类是Java集合框架的核心组成部分之一,主要用于存储和管理各种类型的对象。根据不同的需求和场景,`Collection`接口被细分为多个子接口和实现类,如`List...

    java泛型集合 java集合 集合 java Collection

    `Collection`是所有集合的根接口,它是`List`、`Set`和`Queue`接口的父接口。 `List`接口代表一个有序的集合,元素可以重复,且支持索引访问。`ArrayList`和`LinkedList`是`List`接口的主要实现类。`ArrayList`提供...

    11.集合框架001-Collection接口6-9

    集合框架001-Collection接口6-9"中涉及的关键知识点,包括`Collection`接口、`ArrayList`源码分析、`Comparator`接口以及`Comparable`接口,以及`Arrays`类中的算法。 首先,`Collection`接口是Java集合框架的根...

    鹅厂面试题、大厂面试题、JVM面试题

    Collection 集合接口声明了适用于 Java 集合(只包括 Set 和 List)的通用方法,而 Map 接口并不是 Collection 接口的子接口,但是它仍然被看作是 Collection 框架的一部分。 然后,让我们讨论 Spring 中的内部 ...

    11.集合框架001-Collection接口1-3

    首先,我们来看Collection接口,它是Java集合框架的顶级接口,位于java.util包下。Collection接口定义了对单个元素进行操作的一系列方法,如添加、删除和检查元素是否存在。通过实现这个接口,我们可以创建各种不同...

    Java程序设计 3 数组与集合.pptx

    * Collection集合接口 * List允许重复元素 * Set不允许重复元素 * Map键/值对 List/Set/Map的区别 * List类(元素有序,可重复) * AbstractCollection抽象类,实现大多数Collection接口中的方法 * AbstractList...

    11.集合框架001-Collection接口4-5

    7. **多态与接口**:Collection接口的实现类,如ArrayList、LinkedList等,都是多态的,这意味着你可以声明一个Collection类型的引用,然后将其指向任意实现了Collection接口的具体类的对象,从而实现对不同集合类的...

    11.集合框架001-Collection接口13-16

    集合框架001-Collection接口13-16",通过四个视频文件来深入学习这个关键接口及其相关概念。 首先,我们来看标题中提到的"Collection接口"。它是Java集合框架的顶级接口,位于`java.util`包下。所有的集合类,无论...

    Collection集合习题答案 1

    1. 练习一要求简述集合框架,我们已经解释了集合框架的基本结构和Collection、List、Set接口以及它们的常见实现类。 2. 练习二要求统计Collection中特定元素出现的次数。这个问题可以通过遍历集合并使用equals()...

Global site tag (gtag.js) - Google Analytics