`
bound
  • 浏览: 16620 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

[学习系列]Collection和Map

阅读更多
Collection分支:

set接口:元素无顺序,但是不可重复,可以存放不同的类型的对象,除了collection外,多了一个clear方法
HashSet:实现set结构的类,Set set=new HashSet(),add(),remove()方法
TreeSet类:实现SortedSet(set子接口)接口,不能重复,数据类型一样


List接口:有顺序的,add和remove多了重载方法:add(插入位置int,插入对象),remove同,位置编号从0开始;get,取值;indexOf,得到对象位置;set方法,修改某个位置的数据,同add方法,只是他会把旧位置上的对象返回
LinkedList和ArrayList实现List接口,LinkedList和ArrayList的区别,LinkedList插入速度快,ArrayList查询速度快

Iterator接口:读取collection对象中的数据
Collection有个iterator方法,生成iterator对象,next(),hasNext(),remove()(remove方法会删除掉next取得的数据,注意,不光是删掉iterator中的对象,原来collection中的对象也被删除掉了,所以iterator和生成它的对象是连在一起的,所以不管市collection和iterator对象哪个被修改,另外一个也被修改)

ListIterator接口:除了可以往后读取,还可以往前读取。生成ListIterator的方法是listIterator.只有LinkedList和ArrayList两个类有这个方法,next(),previous(),hasNext(),hasPrevious(),remove(),add(),set(),(注:remove,set,add方法都是以现在所指定的数据位置为修改的位置,不能任意指定其他位置),previousIndex,nextIndex,获得前一个或者后一个的位置,返回int类型

Map分支:

key value,put(关键值,数据),必须都是对象类型;remove()参数是关键值,返回的是数据,putAll(Map t),putAll除了执行put()迭代操作还需要迭代所传递的Map元素,putAll会自动调整Map的大小。
所有键值对-entrySet(),返回Set对象,其中每个对象都是Map.Entry对象;所有键--keySet(),返回Set对象,删除set的元素同时删除map中对应的映射;所有值--values(),返回Collection对象,删除方面同前

实现Map接口的类,三种:
通用Map:用于在应用程序中管理映射,通常在java.utils程序报中实现
HashMap,HashTable,Properties,LinkedHashMap,IdentityHashMap,TreeMap,WeakHashMap,ConcurrendHashMap
专用Map:通常不必亲自创建此类Map,而是通过某些其他类对其进行访问
Java.util.jar.Attributes,javax.print.attribute.standard.PrinterStateReasons
Java.security.Provider,java.awt.RenderingHints,javax.swing.UIDefaults
用户帮助实现自己的Map类的抽象类
AbstractMap

哈希映射:由一个存储元素的内部数组组成,由于内部采用数组存储,因此必然存在一个访问数组的索引机制,实际上,该机制需要一格小于数组大小的整数索引值,该机制称作 哈希函数,在java基于哈希德Map中,哈希函数将对象转换为一个适合内部数组的整数。
Int hasvalue=(key.hashCode()&0x7fffffff)%table.length

不同的键位映射到相同的位置的冲突的处理:在索引位置插入一个链接列表,并简单的将元素添加到此链接列表。
public Object put(Object key, Object value) {
//我们的内部数组是一个 Entry 对象数组
//Entry[] table;
//获取哈希码,并映射到一个索引
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % table.length;
//循环遍历位于 table[index] 处的链接列表,以查明
//我们是否拥有此键项 — 如果拥有,则覆盖它
for (Entry e = table[index] ; e != null ; e = e.next) {
//必须检查键是否相等,原因是不同的键对象
//可能拥有相同的哈希
if ((e.hash == hash) && e.key.equals(key)) {
//这是相同键,覆盖该值
//并从该方法返回 old 值
Object old = e.value;
e.value = value;
return old;
}
}
//仍然在此处,因此它是一个新键,只需添加一个新 Entry
//Entry 对象包含 key 对象、 value 对象、一个整型的 hash、
//和一个指向列表中的下一个 Entry 的 next Entry
//创建一个指向上一个列表开头的新 Entry,
//并将此新 Entry 插入表中
Entry e = new Entry(hash, key, value, table[index]);
table[index] = e;
return null;
}

map大小调整:

内部数组中的每个位置称作bucket,而可用的bucket数(即内部数组的大小)称作capacity,如果将Map调整的足够大可以减少重新调整大小。
负载因子:为确定合适调整大小,而不是对每个bucket中的链接列表的深度进行计数,基于哈希的Map使用一个额外参数并粗略计算bucket的密度。
负载因子,项数(map大小)与容量之间的关系:
如果(负载因子)*(容量)〉map大小,则调整Map大小

将所有的Map变量生命为Map可简化操作
分享到:
评论

相关推荐

    Laravel开发-collection-macros

    它们提供了大量的便利方法,使得处理数据变得更加简洁和高效。`collection macros` 是一种自定义扩展Laravel Collection类的...通过学习和使用这些宏,开发者可以更高效地处理和操作数据,提高代码质量和项目维护性。

    Java基础知识-day02【Collection、泛型】.pdf

    Collection 是单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.List 和 java.util.Set。其中,List 的特点是元素有序、元素可重复。Set 的特点是元素无序,而且不可...

    java collection framework

    Java Collection Framework 提供了一系列实用的算法支持,例如: - `Collections.sort()`: 对 List 进行排序。 - `Collections.reverse()`: 反转 List 的顺序。 - `Collections.shuffle()`: 打乱 List 的顺序。 - `...

    Java中Collection、List、Set、Map之间的关系总结

    Java中Collection、List、Set、Map之间的关系总结是Java编程语言中最基本的集合接口,了解它们之间的关系对于编程语言的学习和应用至关重要。本文将对Collection、List、Set、Map之间的关系进行总结和讲解。 ...

    Tedu一段Java集合Collection

    Java集合框架主要由两个部分组成:`Collection`和`Map`。其中,`Collection`是所有集合类的根接口,它代表了一个对象的集合。这个接口定义了一些通用的操作,例如添加、删除和检查元素是否存在等。`Collection`接口...

    Laravel开发-type-safe-collection .zip

    它包含了各种实用方法,如`map`、`filter`、`pluck`、`where`等,方便开发者对数据进行转换和筛选。 **Type-Safe Collection的实现:** 通常,实现类型安全集合的方式是通过在`Collection`的基础上创建一个新的类,...

    Laravel开发-laravel-helper-collection

    总的来说,"Laravel开发-laravel-helper-collection"是一个致力于优化和扩展Laravel框架中集合操作和辅助函数的工具库,它提供了一系列实用的工具,帮助开发者更好地处理数据,简化代码,提高生产力。对于深入学习和...

    Java集合框架详解

    集合框架是一个统一的数据结构模型,它定义了一系列接口,如Collection、List、Set和Map,以及它们的实现类,如ArrayList、LinkedList、HashSet、HashMap等。容器是这些接口和类的统称,它们用于存储和管理对象。...

    Java中的Map接口——学习小结

    Map接口不是直接实现了数据存储的类,而是作为一个规范,定义了一系列操作键值对的方法。Map接口的实现类包括HashMap、TreeMap等,它们提供了不同的内部实现和性能特性。 1. HashMap:HashMap是最常见的Map实现,它...

    c++ 7collection

    3. **STL(标准模板库)**:STL是C++库的一部分,包含一系列高效的数据结构(如vector、list、set、map等)和算法(如排序、搜索、迭代等)。它极大地提高了程序员的生产力,减少了代码量,并提供了高度优化的实现。...

    a-collection-of-data-structure.zip_188473.com.

    "a-collection-of-data-structure.zip_188473.com." 提供的资源正是这样一个宝贵的学习平台,它包含了数据结构算法的VC程序集,包括源码和可执行文件,便于实践和学习。 首先,让我们了解一下数据结构的基本概念。...

    java集合相关学习[整理].pdf

    这篇文档深入探讨了Java集合框架的实现机制及其相关概念,包括Collection、List、Set和Map等核心接口,以及它们的使用方法和实现原理。 1. 集合框架概述 集合框架是Java API中的一组接口和类,它为处理对象集合提供...

    Java容器类学习心得.pdf

    本篇文章将重点介绍Java容器类中Collection接口、Map接口、Iterator接口以及List、Set和Map的实现类。 首先,Collection接口是容器类层次结构的核心,它是单列集合的主要根接口。Collection接口的主要方法包括add...

    java集合类学习笔记.doc

    ### Java集合类学习笔记知识点详解 #### 一、集合框架概述 ##### 1.1.1 容器简介 在Java编程中,容器是用于存储和管理对象集合的重要工具。当我们处理大量的对象时,比如存储多个员工的信息,仅仅依赖于基本的...

    集合-黑马程序员Java学习笔记

    在学习集合框架时,还需要了解接口如Collection、List、Set和Map。Collection是最基本的接口,List和Set是其子接口。List接口要求元素有序且可重复,而Set接口要求元素无序且唯一。Map接口则代表键值对的集合,它与...

    java集合详解

    Collection接口提供了一系列通用方法,如contains()(判断是否包含指定元素)、clear()(清空容器)、equals()(比较两个集合是否相等)和iterator()(获取迭代器)。 1.2.2 迭代器 迭代器是遍历集合中元素的主要...

    Java学习攻略.pdf

    首先,从标题和描述来看,这份文件的名称为"Java学习攻略.pdf",指明了其核心内容是围绕Java学习的一系列攻略,但实际提供的部分内容显示,该文档可能更偏向于Java学习资源的链接和工具的介绍,而非系统性的学习指南...

    JAVA collection集合之扑克牌游戏实例

    - **Java集合框架(Collection Framework)**:Java集合框架是提供一系列接口和类用于存储和操作对象的集合。它主要包括两个根接口:Collection和Map。其中Collection接口是集合框架的父接口,而Map接口则用于存储...

Global site tag (gtag.js) - Google Analytics