JAVA集合框架--详解
java集合框架为我们提供了一套性能优良、使用方便的接口和类,它们都位于java.util包中。集合框架是一种为表示和操作而规定的一种统一的彼岸准体系结构。
集合框架包含的主要内容及彼此之间的关系如图所示:
集合框架被设计成要满足以下几个目标。
该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
对一个集合的扩展和适应必须是简单的。
通常说java集合框架共有三大类接口:
Collection接口存储一组不唯一(允许重复),无序的对象。
Set接口继承Collection接口,存储一组唯一(不允许重复),无序的对象
List接口继承Collection接口,存储一组不唯一(允许重复),有序(以元素插入次序来放置元素,不会重新排列)的对象
Map接口存储一组成对的键-值对象,提供key(键)到values(值)的映射,Map中的Key不要求有序,不允许重复。values同样不要求有序,但是允许重复
List接口(ArraryList集合类):
实现List接口的常用类有ArraryList和LinkList。他们都可以通过容纳所有类型的对象,包括null,允许重复,并且都保证元素的存储顺序;ArrayList对数组进行了封装,实现了长度可变的数组。
问题:集合存储多个狗狗的信息,获取存储狗狗的总数,按照存储顺序获取各个狗狗信息并逐条输出相关内容;
分析:元素个数不确定,要求获得存储元素的实际个数,按照存储的顺序获取并输出元素的信息,可以通过List接口的实现
上述问题实现步骤:
创建多个狗狗的对象
创建ArraryList集合对象,并把多个狗狗的对象放入其中
输出集合中狗狗的数量
通过遍历集合显示各个狗狗的信息
实现代码:
Dog类:对狗狗属性进行定义声明、封装
* Created by WuHuaSen .* Created Date: 2022/3/15 9:08* Version: V1.0*/
class Dog {private String Name;//名字private String Variety;//品种public Dog() {}public Dog(String Name, String Variety) {this.Name = Name;this.Variety = Variety;}public String getName() {return Name;}public void setName(String name) {Name = name;}public String getVariety() {return Variety;}public void setVariety(String variety) {Variety = variety;}
}
ListInterFace类:问题中通过实现List接口,对问题要求进行实现:
public class ListInterFace {public static void main(String[] args) {//创建多个狗狗对象Dog ououDog = new Dog("欧欧", "雪纳瑞");Dog yayaDog = new Dog("亚亚", "拉布拉多");Dog meimeiDog = new Dog("美美", "雪瑞纳");Dog feifeiDog = new Dog("菲菲", "拉布拉多");//创建ArrayLIst集合对象并把4个狗狗对象放入其中List dogs = new ArrayList();dogs.add(ououDog);dogs.add(yayaDog);dogs.add(meimeiDog);dogs.add(2, feifeiDog);//菲菲添加到指定的位置//输出集合中狗狗的数量System.out.println("共计有:" + dogs.size() + "条狗狗");//通过遍历集合显示各条狗狗的信息System.out.println("姓名\t\t品种");for (int i = 0; i < dogs.size(); i++) {Dog dog = (Dog) dogs.get(i);//ArraryList存储数据类型是Object,所以使用get()方法时需要强制类型转换System.out.println(dog.getName() + "\t\t" + dog.getVariety());}}
}
执行结果:
注!!List接口的add(Object o)方法的参数类型是Object类型,及时在调用时实参是Dog类型,但是系统认为里面是Object类型,所以在通过get(int i)方法获取元素必须进行强制类型转换,如 Dog dog = (Dog) dogs.get(i),否则会编译错误
LinkedList集合类:
由于ArraryList采用了和数组相同得到存储方式,在内存中分配连续的空间,在添加和删除非尾部元素时会导后面所有元素的移动,性能低下。所以在插入、删除操作比较频繁时,可以考虑使用LinkesList来提高效率。
问题:在集合的头部或尾部添加或者删除狗狗对象的实现
上述问题实现步骤:
创建多个狗狗的对象
创建LinkedList集合对象并把狗狗对象放入其中
查看集合第一条狗狗的昵称、查看最后一条狗狗的昵称
删除集合中第一条狗狗和最后一条狗狗
显示删除部分狗狗后集合中的各条狗狗的信息
实现代码:
test2类:对问题需求进行实现
import java.util.LinkedList;/*** Description: JiHeKuangJIA* Created by WuHuaSen .* Created Date: 2022/3/15 15:10* Version: V1.0*/
public class test02 {public static void main(String[] args) {//创建多个狗狗对象Dog ououDog = new Dog("欧欧", "雪纳瑞");Dog yayaDog = new Dog("亚亚", "拉布拉多");Dog meimeiDog = new Dog("美美", "雪瑞纳");Dog feifeiDog = new Dog("菲菲", "拉布拉多");//创建LinkedList集合对象并把狗狗对象放入其中LinkedList dogs = new LinkedList();dogs.add(ououDog);dogs.add(yayaDog);dogs.addLast(meimeiDog);dogs.addFirst(feifeiDog);//3、查看集合第一条狗狗的昵称Dog dogFirst = (Dog) dogs.getFirst();System.out.println("第一条狗狗的昵称是" + dogFirst.getName());//4、查看最后一条狗狗的昵称Dog dogLast = (Dog) dogs.getLast();System.out.println("第一条狗狗的昵称是" + dogLast.getName());//5\删除集合中第一条狗狗和最后一条狗狗dogs.removeFirst();dogs.removeLast();//6、显示删除部分狗狗后集合中的各条狗狗的信息System.out.println("删除部分狗狗后还有"+dogs.size()+"狗狗");for (int i = 0;i<dogs.size();i++){Dog dog = (Dog) dogs.get(i);System.out.println(dog.getName()+"\t"+dog.getVariety());}}
}
代码执行结果如下:
Map接口(HashMap集合类):
Map接口存储一组成对的键-值对象,提供key(键)到values(值)的映射。Map中的key不要求有序,不允许重复。values同样不要求有序,但是值可以重复。最常用的Map实现类是HashMap,存储方式是哈希表,哈希表也称散列表,是根据关键码值而直接进行访问的数据结构。
问题: 建立国家英文简称和中文全名之间的键-值映射,如CN-中华人民共和国,根据“CN”可以查到“妆花人民共和国”,通过删除键实现对应值的删除
分析:Java集合框架中提供了Map接口,专门用来处理键-值映射数据的存储。Map中可以存储多个元素,每个对象都是由两个对象组成,即一个键对象对用一个值对象,可以根据键的实际对应值进行映射
上述问题实现步骤:
根据HashMap存储多组国家英文简称和中文全称的“键-值对”
显示“CN”对应国家的中文简称
显示集合中元素的个数
判断两次Map中是否存在"FR"键
分别显示键集、值集和键-值集
实现代码:
test2类:对问题需求进行实现
import java.util.HashMap;
import java.util.Map;/*** Description: JiHeKuangJIA* Created by WuHuaSen .* Created Date: 2022/3/15 15:42* Version: V1.0*/
public class test03 {public static void main(String[] args) {//1、根据HashMap存储多组国家英文简称和中文全称的“键-值对”Map countries = new HashMap();countries.put("CN", "中华人民共和国");countries.put("RU", "俄罗斯联邦");countries.put("FR", "法兰西共和国");countries.put("US", "美利坚共和国");//2、显示“CN”对应国家的中文简称String Country = (String) countries.get("CN");System.out.println("CN对应的国家是:" + Country);System.out.println("----------------------------");//3、显示集合中元素的个数System.out.println("Map集合中共有" + countries.size() + "个国家");System.out.println("----------------------------");//4、判断两次Map中是否存在"FR"键System.out.println("Map中包含FR的key吗?" + countries.containsKey("FR"));countries.remove("FR");System.out.println("Map中包含FR的key吗?" + countries.containsKey("FR"));System.out.println("----------------------------");//5、分别显示键集、值集和键-值集System.out.println(countries.keySet());System.out.println(countries.values());System.out.println(countries);System.out.println("----------------------------");//6、清空HashMap并判断countries.clear();if (countries.isEmpty()){System.out.println("已经清空Map中的数据");}}
}
代码执行结果如下:
Iterator迭代器
所有集合的接口和类都没有提供相应的遍历方法,而是把遍历交给了迭代器Iterator完成。Iterator为集合而生,专门实现集合的遍历。他隐藏了各种集合实现类的内部细节,提供了遍历集合的统一编程接口;
Collection接口的iterator()方法返回一个Iterator,然后通过Iterator接口的两个方法即可方便地实现遍历。
boolean hasNext():判断是否存在另一个可访问的元素。
Object next():返回要访问的下一个元素。
示例需求说明:
根据宠物昵称查找对应的宠物,如果找到,则显示宠物信息;否则给出错误提示,使用Iterator迭代器
实现步骤:
创建多个狗狗对象
创建Map集合对象并把多个狗狗对象放入其中
通过迭代器一次输出集合中所有狗狗的信息
实现代码 :
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;/*** Description: JiHeKuangJIA* Created by WuHuaSen .* Created Date: 2022/3/15 18:49* Version: V1.0*/
public class test04 {public static void main(String[] args) {//创建多个狗狗对象Dog ououDog = new Dog("欧欧", "雪纳瑞");Dog yayaDog = new Dog("亚亚", "拉布拉多");Dog meimeiDog = new Dog("美美", "雪瑞纳");Dog feifeiDog = new Dog("菲菲", "拉布拉多");//2、创建Map集合对象并把多个狗狗对象放入其中Map dogMap = new HashMap();dogMap.put(ououDog.getName(), ououDog);dogMap.put(yayaDog.getName(), yayaDog);dogMap.put(meimeiDog.getName(), meimeiDog);dogMap.put(feifeiDog.getName(), feifeiDog);//3、通过迭代器一次输出集合中所有狗狗的信息System.out.println("使用Iterator遍历,所有狗狗的昵称是:\t所有狗狗的品种是:");Set keys = dogMap.keySet();//取出所有key的集合Iterator iterator = keys.iterator();//获取Iterator对象while (iterator.hasNext()) {String key = (String) iterator.next();//取出keyDog dog = (Dog) dogMap.get(key);//根据key取出对应的值System.out.println(key + "\t" + dog.getVariety());}//}
}
代码执行结果:
小结:集合弥补了数组的缺陷,它比数组更灵活更实用,可大大提高软件的开发效率,而且不同的集合可适用于不同的场合。集合框架是为表示和操作集合而规定的一种标准体系结构。集合框架包括三大块内容:对外的接口,接口的实现和集合运算的算法~~~~
JAVA集合框架--详解相关推荐
- Java 集合框架 详解
一.Java 集合框架概述 集合框架是一个用来代表和操纵集合的统一架构(java集合框架位于java.util包中).所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.例如 Collec ...
- Java集合框架详解
一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和 ...
- Java 集合框架详解
1.集合框架的设计目标 该框架必须是高性能的.基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的. 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性. 对一个集合的扩展和适应必须 ...
- 集合框架详解之Set、Map接口与实现类
集合框架 1.Set集合 1.1Set集合概述 Set实现类:HashSet类.TreeSet类 特点:无序.无下标.元素不可重复 方法:全部继承自Collection中的方法 1.11 Set接口的 ...
- 一文带你了解-Java集合超详解(破天荒总结)
集合的特点 集合的特点主要有如下两点: 对象封装数据,对象多了也需要存储.集合用于存储对象. 对象的个数确定可以使用数组,对象的个数不确定的可以用集合.因 为集合是可变长度的. 集合和数组的区别 数组 ...
- 双目视觉集合框架详解
双目视觉几何框架详解 一.图像坐标:我想和世界坐标谈谈(A) 玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题.希望这样的方式让大家以一个轻松的心态阅读玉米的<计算机视觉学习笔记> ...
- java集合详解_「软帝学院」Java进阶者专栏:集合框架详解3
软帝学院笔记Day14 集合框架(HashSet存储字符串并遍历) A:Set集合概述及特点 通过API查看即可 B:案例演示 HashSet存储字符串并遍历 HashSet hs = new Has ...
- java面向对象编程集合边框_Java学习系列(七)Java面向对象之集合框架详解(上)
Java集合 有时也将集合称为容器类,它的作用就是用来"装对象"的.这里要注意的是集合也可以是对象.下面先看一张图: HashSet:底层用一个数组存元素 --而且这个数组的长度永 ...
- Java集合核心详解【十分钟带你了解整个集合体系】
前言: 集合是Java中非常重要的一章,学习难度也相对较大,不会很快就能掌握,这里我们先对集合框架有一个大概的了解,记住其中的基础知识,后面深入研究某一个集合时,才能更好的掌握. 文章目录 一.集合介 ...
- Java集合框架全解
Collection 集合 集合接口有2个基本方法: public interface Collection<E> {//向集合中添加元素.如果添加元素确实改变了集合就返回 true, 如 ...
最新文章
- Spring MVC 原理探秘 - 一个请求的旅行过程
- python punctuation_经验拾忆(纯手工)=gt; Python基本数据类型_Python - UCloud云社区...
- linux 内存管理 page fault带来的性能问题
- 机器人学习--激光slam简单案例版学习参考(转)
- Android Socket编程(多线程、双向通信)
- scp跨主机拷贝工具
- mysql php 乱码问题_解决php与mysql中文乱码问题
- 得到IOleInPlaceActiveObject接口,IOleInPlaceActiveObject::TranslateAccelerator(msg);
- LeetCode刷题(Python)——汉明距离
- [翻译] SoundManager 音频管理器
- .net平台调用(P/Invoking)查询网站
- 从程序员到项目经理(28):该死的结果导向(只看结果,不问过程到底行不行?)...
- Windows Server 2016 身份管理 (MCSA 认证 70-742)-李海园-专题视频课程
- 虚拟服务器共享文件设置,虚拟机共享文件夹设置流程
- BZOJ 3699 GAL的数组
- arduino mega 2560 针脚说明
- 【vm】虚拟机版本管理
- Excel自动打开、刷新、保存
- 解压压缩包报错:tar: invalid tar magic
- Koa2——洋葱模型,简单实现
热门文章
- c语言写识别电压的程序,PIC单片机C语言编程实例——交流电压测量
- ppt转换成pdf软件免费版
- Linkedin领英如何避免封号
- 商城小程序源码_商城类小程序制作全过程,无需懂小程序商城源码
- 军用加固便携式计算机,PCI/PCIe
- 菜鸟python实例_菜鸟学Python,双手奉上老司机给上路新手总结的Python实战问题…...
- 影院售票系统-----一个让你有成就感的小项目,只有一丢丢哦
- 软件设计说明书模版(申请软件著作权可供参考)
- Python+Spark大数据音乐推荐系统
- 新闻管理系统(增删改查+分页+阅读+发布评论+删除评论+数据库)