Java的常用集合框架
Java的集合框架
Java的集合框架主要分为两个部分,第一种是集合(Colletion)另外是一种是Map。
1.Collection
主要用来存储一个元素集合,Colletion接口有三个子类型,分别是List,Set和Queue.
下面是一些抽象类,类如AbsetractList。实现这些抽象类的具体类,常见的有ArrayList,
LinkedList,HashSet,TableSet,以及LinkedHashSet.
2.Map
主要存储Key-Value pair.同Collection,但其下面的抽象类和具体类不同, 主要有HashMap,TreeMap,
HashTable.
接口:代表集合的抽象数据类型,之所以定义了多个接口,是为了以不同的方式操作数据对象。
实现类:集合接口的具体实现.
算法:实现接口的对象里面一些有用的方法,例如排序和搜索,这些算法被称为多态,相同的方法在不同的接口上有不同的实现.Collections
Set——AbstractSet——HashSet
Set——SortedSet——TreeSet
Java不提供直接继承Collection的类,只能继续于子接口,
List接口是一个有序的Collection,可以控制元素插入的位置,方便索引,有序的插入。检索效率高,但插入和删除会引起其他元素位置改变,效率低
Set接口是一个无序的Collection,同时不保存重复元素,检索效率低,但删除和插入效率高,不会引起其他元素位置的改变。
SortedSet继承于Set,保证有序
Map提供Key到Value的映射
SortedMap继承于Map,保持Key升序排列
一般情况下我们使用for和增强for循环来遍历集合框架,但我们也可以使用iterator来进行遍历,迭代器实现了iterator接口的一个对象。
Iterator<>ite = list.iterator();
while(iterator.hasNext())System.out.println(iterator.next());
遍历Map的情况有所不同
1.通过Key可以对Map进行遍历:
for (String key : map.keySet()) {System.out.println("key= "+ key + " and value= " + map.get(key));}
2 通过对Value进行遍历,但无法访问Key值
for (String v : map.values()) {System.out.println("value= " + v);}
ArrayList实现类的具体方法./
1.add(), addAll(int index, Collection c), remove(), clear(), set( , ), isEmpty. 最常用的方法, toString(),toArray(),
2.不太常用的方法
replaceAll(e->e*2) || replaceAll(e->e.toUppserCase())
Contains();
LinkedList
1 可以分为双向链表和单项链表
包含两个或三个部分,主要是自己节点的信息以及下一节点的地址(如果是双向链表会有上一个节点的地址)
2 实现了Deque和Queue的接口,可当作队列来使用。
常用的方法:
removeLast(); remove (int index); getFirst(); getLast();
indexOf(Object o); lastindexOf(Object o);
peek(); peekLast();
HashSet
HashSet基于HashMap来实现的,不可以有重复的值,可以有Null值。HashSet中元素是无序的,同时不是线程安全的。
常用的API
contains(Obejct o); add(); remove(Object o);
HashMap
HashMap是一个散列表,存储着Key和Value的映射。存储元素是无序的,不支持线程的同步。
常用的方法:
put(); get(); remove(key); clear(); isEmpty(); containsKey(or Value)();
replace(key, oldValue, Value) 可以选择带旧值或者不带。
getOrDefault(key, default);
compute(key, BiFunction)
map.compute(key, (key, value) -> value - value*10%);
Java Iterator
Iterator 是一种访问集合的方法,可用于迭代ArrayList和Map等集合
1.Iterator的声明:
Iterator <> it = map.iterator();
常用的方法:
iterator.hasNext();
iterator.next();
iterator.remove();
Java Object
Object 是所有类的父类。所有的子类都可以使用Object类的方法,下面详细介绍Object类的各种方法:
clone()
是一种浅拷贝,只会拷贝引用对象的地址,而不会重新分配引用对象的内存;而对应的深拷贝就会将引用对象的内存重新分配。
(类型可强制转换)obj2 = () obj1.clone();
equals()
判断两个对象的引用是否指向同一个对象,即比较2个对象的内存地址是否相等。
如果重写了equals方法,就一定要重写HashCode方法;
在Java中,对对象的存储采用了存在哈希表的处理方法,根据对象的地址转换返回的一个哈希值。
哈希表的结构:一个长度为N的数组加N个链表{
当计算出一个对象的哈希值之后,对哈希表的长度进行取余,此时不同的哈希值得到的插入数组的index可能是相同的,此时我们就应该用equals()方法进行判断,不同的话就在链表中进行插入}
两个对象的HashCode不同,则equals()方法一定返回false;
两个对象的HashCode相同,根据equals方法返回值来确定是否为true或者flase;
当我们判断两个对象的引用是否相同时,我们需要先用HashCode方法进行判断,然后再用equals方法进行判断。如果我们只重写了equals方法的话,可能会导致HashCode不同的两个对象的引用,判断得到的结果是相同的。
我们使用HashMap的目的是获取唯一映射。
如果我们将HashMap中的key值为自己写的对象,此时我们必须重写HashCode和Equals方法。如果不这样做,我们就无法实现唯一映射。
分为两个方面:
1.只重写了的HashCode而没有重写Equals
此时就要应用链表的知识,我们得到HashCode确实是相同的,但是我们还要经过equals方法进行比较,我们知道,如果不定义equals方法,默认为Object的equals方法,此时比较的是两个对象的引用,即地址。所以我们无法实现想要的功能。必须要将equals方法写为只要比较两个对象的值相同就可以。
2.只重写了的equals方法没重写hashcode
值相同的两个对象的hashCode不相同,无法实现唯一映射。
对于HashMap的查找来说,效率很高。
getClass()
object.getClass();可以返回一个对象运行时对象的类
notify()
用来唤醒一个再次对象监视器上的线程,只能被作为对象监视器的所有者来调用;
一个线程想要成为对象监视器的所有者,有三种方法:
执行对象的同步实例方法
使用 synchronized 内置锁
对于 Class 类型的对象,执行同步静态方法
wait
toString
Java的常用集合框架相关推荐
- Thinking in java基础之集合框架
Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...
- java把map值放入vector_Thinking in java基础之集合框架
Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...
- Java的并发集合框架
文章目录 一.并发集合框架 1. 简介 2. 接口Iterable 2. 接口Collection 3. 接口List 4. 接口Set 5. 接口Queue 6. Deque 二.非阻塞队列 1. ...
- java程序中集合框架有哪些
作者:代码界的小白 链接:Java中集合在面试中的高频考点_技术交流_牛客网 来源:牛客网 本章节主要分享一些Java中的集合在面试中常问的高频问题,这里给出的是相对比较简略的答案,不过针对面试的回答 ...
- Set精讲(Java)·算法常用集合处理方法
Set精讲(Java)·算法常用集合处理方法 Set概述 Set集合类似于一个罐子,程序可以依次把多个对象"丢进"Set集合,而Set集合通常不能记住元素的添加顺序.实际上Set就 ...
- java中的集合框架_JAVA中的集合框架(上)List
第一节 JAVA中的集合框架概述 集合的概念,现实生活中:很多事物凑在一起就是一个集合:数学中的集合:具有相同属性事物的总体:JAVA中的集合:是一种工具类,就像是容器,储存任意数量的具有共同属性的对 ...
- Java学习---day14_集合框架03
Java学习-day14_集合框架03 Set集合 Set集合中,没有下标的概念 Set集合,是一个去重复的集合.在Set集合中不会添加重复的元素的 在向一个Set集合中添加元素的时候,会先判断这个元 ...
- 第48节:Java当中的集合框架
Java当中的集合框架 01 在我们班里有50位同学,就有50位对象. // 简书作者:达叔小生 Student[] stus = new Student[20]; 结果来了一位插班生,该同学因为觉得 ...
- Java SE day14_集合框架4
Java SE day14_集合框架4 Map集合的特点: Map集合的功能概述 ==HashMap中嵌套HashMap== 1:Hashtable和HashMap的区别? Collections集合 ...
- Java高级特性 集合框架、泛型和Collection(一)(第二十三天)
集合的使用: 如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象--可以使用Java集合框架 java集合框架: 在java中数据结构是以某种形式将数据组织在一起的集合.他们不仅存储数据 ...
最新文章
- 数据库db_files参数增大怎么办
- 关于计算机应用技术的周记,计算机应用技术专业实习周记范文
- zuulfilter添加例外_SpringCloud之Zuul 自定义filter
- think-in-java(9)接口
- plist中数据存取
- 概率算法/拉斯维加斯 蒙特卡洛 舍伍德算法
- 世界各国1960年到2020年gdp数据抓取
- 电磁场与电磁波-场论基础
- 显控触摸屏编程手册_深圳显控AKWORKSHOP触摸屏与ALLENBRADLEY通讯手册.pdf
- 基于PIC单片机USB接口的数据采集系统设计
- 我们梳理了国内外逾80家公司,发现6大关键趋势 | 36氪眼健康行业报告
- 平面设计美学的意义是什么?
- 华为手机隐藏的3大功能,现在才知道,怪不得别人手机这么好用
- Set Similarity
- iOS设备管理器有人推荐iTunes,有人推荐iMazing,到底如何选择
- RGB、HSV和Lab颜色空间
- Google Spanner原理:地球上最大的单一数据库
- 项目一 Windows Server 2012 R2服务器安装与配置
- iClap的名字是怎么来的,clap是有什么特殊的意义么?
- FPGA学习之串口发送程序设计(来自小梅哥的教程学习者)
热门文章
- 网站地图在线生成html,如何制作网站地图(sitemap.html和sitemap.xml)?
- 优雅降级实现IE8的transform平移属性
- 如何获取常用汉字(GB2312)
- matlab 三阶段dea模型,三阶段DEA模型SFA二阶段剔除过程
- 英特尔固态硬盘测试软件,英特尔固态硬盘工具(Intel SSD Datacenter Tool)
- Sublime Text3配置LaTeX环境及使用Sumatra PDF作为阅读器——亲测可用
- 蜗牛星际ABCD款,这几款的区别你知道吗?
- MYSQL误删数据恢复
- 轻松学习Linux之入门篇
- SpringBoot启动报错(一篇教你如何处理mapper绑定问题) BindingException: Invalid bound statement (not found)