>两大主流:collection、map(接口)

底层实现为数组和链表;

RationalRose工具:接口与典型实现类;

Map为key和value对的形式;

>HashMap(线程不安全)/Hashtable(线程安全,过时淘汰)

两个类功能相似,同样当需要线程安全的时候,使用Collections工具类,将HashMap转为线程安全;

基本操作代码:

package com.ls.map;import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;public class Tmap {
public static void main(String[] args) {HashMap map=new HashMap();//存放数据,如果key相同,后面的值覆盖前面的值;map.put("0531", "济南");map.put("0532", "青岛");//sizemap.size();//根据key来拿到valueObject object = map.get("0531");//拿到所有key的集合,使用迭代器迭代Set keySet = map.keySet();Iterator iterator = keySet.iterator();while (iterator.hasNext()) {System.out.println(map.get(iterator.next()));}//直接拿到所有value,迭代Collection values = map.values();for (Iterator iterator2 = values.iterator(); iterator2.hasNext();) {System.out.println(iterator2.next());}
}
}

>HashSet与HashMap之间的关系

类和类之间的关系:(继承,关联管理,依赖)

HashSet底层代码是依赖于HashMap,Map的底层代码比较复杂;

1.HashMap主要用途是什么

数字字典:(已经存在的可罗列的一堆数据,并不会收到业务的影响,比如省和简称)

缓存:读缓存,写缓存;

2.HashMap使用的时候怎样可以更快一些

HashMap map=new HashMap(//这里放入2的幂,同时比预计的数字大一点);

3.HashMap底层源码的学习

DEFAULT_INITIAL_CAPACITY 初始容量:要求是2的幂,默认是16;

MAXIMUM_CAPACITY  HashMap的负载因子,用来决定HashMap什么时候进行扩容,默认0.75,也就是当前存放12个数据的时候,进行扩容;

HashMap的底层是一个数组,所以存在扩容问题;

什么时候扩容:当数组长度*负载因子>=当前存放的键值对的数量;

transient Entry[ ] table;

//这个是用来存放键值对的数组(数组的每个位置上可能是链表,但要防止这种情况);

threshold:数组扩容的阈值;

Entry类:一个单向链表;

默认的构造:

put方法:

1.根据key的hashcode()计算出一个hash值

2.拿着这个hash值和16(数组长度)(16-1 15 1111 只要h不同,与出来结果就不同)计算一个int值i

这个i就是最终这个键值对应value数据要放到数组的下标

注意:这里的扩容方法,不是像ArrayList中简单的Array.copy...

因为这里的数组的长度,参与的value值下标的计算,要把数据拿出来,重新计算hash值,再放回去;

>collections工具类

1.排序

collections.sort();collections.sort(//容器,//写一个比较器,重写compare方法);

2.查找

collections.sort();collections.binarySearch();//先排序,再二分查找,返回该值对应的索引;collections.replaceAll(//容器,1,100);

3.同步(线程安全)

4.不可变集合

collections.unmodfiableList(list );

5.随机排序

collections.shuffle(list);

>TreeMap

实现对所有的key值进行排序;

>Enumeration (比较古老的类,不怎么用)使用

一种迭代的方式(不推荐使用):

集合框架(Map容器/Collections工具类)相关推荐

  1. java内部类、接口、集合框架、泛型、工具类、实现类

    一.内部类 1.成员内部类. (1)成员内部类的实例化: 外部类名.内部类名   变量名=外部类对象.new 内部类名(); class Person{class Test{}}Person p=ne ...

  2. 1-6 集合\第7节 Collections工具类\第8节 Map集合

    这里写自定义目录标题 P27418_Collections集合工具类的方法_addAll&shuffle P27519_Collections集合工具类的方法_sort(List) P2770 ...

  3. JavaSE学习总结(十四)Map集合/Map和Collection的区别/HashMap/LinkedHashMap/TreeMap/集合间的嵌套/Hashtable/Collections工具类

    一.Map集合 我们知道,一个学号就能对应一个学生,并且每个学生的学号都不同,学号就像一个键,对应的学生就是该键对应的值.日常生活中经常能见到这种类似学号对应学生的例子.Java 为了我们更加方便地去 ...

  4. 菜鸟学习笔记:Java提升篇4(容器4——Collections工具类、其他容器)

    菜鸟学习笔记:Java容器4--Collections工具类.其他容器 Collections工具类 容器其他知识点 队列Queue Enumeration接口 Hashtable Propertie ...

  5. java 中间容器 表格_【JAVA SE基础篇】45.迭代器、Collections工具类以及使用容器存储表格...

    本文将要为您介绍的是[JAVA SE基础篇]45.迭代器.Collections工具类以及使用容器存储表格,具体完成步骤: 1.迭代器 迭代器为我们提供了统一遍历容器(List/Map/Set)的方式 ...

  6. 集合框架学习笔记:Collection体系和Map体系、Collections工具类

    集合框架 Java是面向对象编程,万事万物皆"对象",为了方便对"对象"进行操作,需要对"对象"进行存储,而Java集合就是存储" ...

  7. Java知识点04——集合(Set、List、Queue、Map、Collection和Iterator、Collections工具类)

    Java知识点04--集合(Set.List.Queue.Map.Collection.Iterator.Collections工具类) 一.集合 1.1 集合概述 二.Collection 2.1 ...

  8. 【Java源码分析】集合框架-Collections工具类-Arrays工具类

    集合框架Collection 和Collections和Arrays工具类 一开始总是搞不清楚Collection和Collections的区别,不过看下代码应该很清楚,一个是接口,一个是工具类 Co ...

  9. Java集合框架:Collections工具类

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

最新文章

  1. 饥荒海难机器人怎么用_饥荒海难机器人作用详解 机器人有什么用
  2. 干货 | 华尔街留下的指标之王(附代码展示)
  3. 天气预报接口和城市代码
  4. C#-析构方法与构造方法 087
  5. 树莓派 无法安装mysql_树莓派安装mysql
  6. matlab做聚类分析
  7. Gradle教程Part2:java工程
  8. python 数据流中的移动平均值_Python实现数据流中的中位数【堆】
  9. python贪吃蛇的实验报告_贪吃蛇游戏程序设计实验报告.doc
  10. PyTest 生成多种格式的 测试报告 report
  11. 计算机win10无法打开小键盘,win10数字小键盘开机不启动解决方法
  12. 高级编程技术,第三周
  13. 搜狗VS有道,搜索市场追赶者
  14. 亲属卡额度是什么意思_2019信用卡权益总结之十二:附属卡
  15. odroid-xu4(ubuntu mate 16.04)源码编译opencv 3.2
  16. android studio在夜神上打开_Android Studio之使用连接夜神模拟器分析Smail 【详文】8.7日更正...
  17. 2022-2028全球与中国呼吸系统疾病治疗市场现状及未来发展趋势
  18. ntext字段的替换处理示例--全表替换
  19. 路由器DMZ简单解说
  20. 关于EBGP用回环口起邻居遇到的问题

热门文章

  1. Python入门8_方法,属性,迭代器
  2. ChannelHandler 与 ChannelPipeline 详解
  3. MQ的连接是否是线程安全的
  4. 关于SpringBoot场景启动器
  5. 【leetcode】957. Prison Cells After N Days
  6. SQLite事务与自增深度分析
  7. mysql安装图解及报错解决
  8. ucGUI 架构介绍
  9. [转]项目管理有感之一 沟通
  10. 【读书笔记】原型模式代码(C++) 第一版