集合框架(Map容器/Collections工具类)
>两大主流: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工具类)相关推荐
- java内部类、接口、集合框架、泛型、工具类、实现类
一.内部类 1.成员内部类. (1)成员内部类的实例化: 外部类名.内部类名 变量名=外部类对象.new 内部类名(); class Person{class Test{}}Person p=ne ...
- 1-6 集合\第7节 Collections工具类\第8节 Map集合
这里写自定义目录标题 P27418_Collections集合工具类的方法_addAll&shuffle P27519_Collections集合工具类的方法_sort(List) P2770 ...
- JavaSE学习总结(十四)Map集合/Map和Collection的区别/HashMap/LinkedHashMap/TreeMap/集合间的嵌套/Hashtable/Collections工具类
一.Map集合 我们知道,一个学号就能对应一个学生,并且每个学生的学号都不同,学号就像一个键,对应的学生就是该键对应的值.日常生活中经常能见到这种类似学号对应学生的例子.Java 为了我们更加方便地去 ...
- 菜鸟学习笔记:Java提升篇4(容器4——Collections工具类、其他容器)
菜鸟学习笔记:Java容器4--Collections工具类.其他容器 Collections工具类 容器其他知识点 队列Queue Enumeration接口 Hashtable Propertie ...
- java 中间容器 表格_【JAVA SE基础篇】45.迭代器、Collections工具类以及使用容器存储表格...
本文将要为您介绍的是[JAVA SE基础篇]45.迭代器.Collections工具类以及使用容器存储表格,具体完成步骤: 1.迭代器 迭代器为我们提供了统一遍历容器(List/Map/Set)的方式 ...
- 集合框架学习笔记:Collection体系和Map体系、Collections工具类
集合框架 Java是面向对象编程,万事万物皆"对象",为了方便对"对象"进行操作,需要对"对象"进行存储,而Java集合就是存储" ...
- Java知识点04——集合(Set、List、Queue、Map、Collection和Iterator、Collections工具类)
Java知识点04--集合(Set.List.Queue.Map.Collection.Iterator.Collections工具类) 一.集合 1.1 集合概述 二.Collection 2.1 ...
- 【Java源码分析】集合框架-Collections工具类-Arrays工具类
集合框架Collection 和Collections和Arrays工具类 一开始总是搞不清楚Collection和Collections的区别,不过看下代码应该很清楚,一个是接口,一个是工具类 Co ...
- Java集合框架:Collections工具类
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
最新文章
- 饥荒海难机器人怎么用_饥荒海难机器人作用详解 机器人有什么用
- 干货 | 华尔街留下的指标之王(附代码展示)
- 天气预报接口和城市代码
- C#-析构方法与构造方法 087
- 树莓派 无法安装mysql_树莓派安装mysql
- matlab做聚类分析
- Gradle教程Part2:java工程
- python 数据流中的移动平均值_Python实现数据流中的中位数【堆】
- python贪吃蛇的实验报告_贪吃蛇游戏程序设计实验报告.doc
- PyTest 生成多种格式的 测试报告 report
- 计算机win10无法打开小键盘,win10数字小键盘开机不启动解决方法
- 高级编程技术,第三周
- 搜狗VS有道,搜索市场追赶者
- 亲属卡额度是什么意思_2019信用卡权益总结之十二:附属卡
- odroid-xu4(ubuntu mate 16.04)源码编译opencv 3.2
- android studio在夜神上打开_Android Studio之使用连接夜神模拟器分析Smail 【详文】8.7日更正...
- 2022-2028全球与中国呼吸系统疾病治疗市场现状及未来发展趋势
- ntext字段的替换处理示例--全表替换
- 路由器DMZ简单解说
- 关于EBGP用回环口起邻居遇到的问题