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集合框架--详解相关推荐

  1. Java 集合框架 详解

    一.Java 集合框架概述 集合框架是一个用来代表和操纵集合的统一架构(java集合框架位于java.util包中).所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.例如 Collec ...

  2. Java集合框架详解

    一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和 ...

  3. Java 集合框架详解

    1.集合框架的设计目标 该框架必须是高性能的.基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的. 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性. 对一个集合的扩展和适应必须 ...

  4. 集合框架详解之Set、Map接口与实现类

    集合框架 1.Set集合 1.1Set集合概述 Set实现类:HashSet类.TreeSet类 特点:无序.无下标.元素不可重复 方法:全部继承自Collection中的方法 1.11 Set接口的 ...

  5. 一文带你了解-Java集合超详解(破天荒总结)

    集合的特点 集合的特点主要有如下两点: 对象封装数据,对象多了也需要存储.集合用于存储对象. 对象的个数确定可以使用数组,对象的个数不确定的可以用集合.因 为集合是可变长度的. 集合和数组的区别 数组 ...

  6. 双目视觉集合框架详解

    双目视觉几何框架详解 一.图像坐标:我想和世界坐标谈谈(A) 玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题.希望这样的方式让大家以一个轻松的心态阅读玉米的<计算机视觉学习笔记> ...

  7. java集合详解_「软帝学院」Java进阶者专栏:集合框架详解3

    软帝学院笔记Day14 集合框架(HashSet存储字符串并遍历) A:Set集合概述及特点 通过API查看即可 B:案例演示 HashSet存储字符串并遍历 HashSet hs = new Has ...

  8. java面向对象编程集合边框_Java学习系列(七)Java面向对象之集合框架详解(上)

    Java集合 有时也将集合称为容器类,它的作用就是用来"装对象"的.这里要注意的是集合也可以是对象.下面先看一张图: HashSet:底层用一个数组存元素 --而且这个数组的长度永 ...

  9. Java集合核心详解【十分钟带你了解整个集合体系】

    前言: 集合是Java中非常重要的一章,学习难度也相对较大,不会很快就能掌握,这里我们先对集合框架有一个大概的了解,记住其中的基础知识,后面深入研究某一个集合时,才能更好的掌握. 文章目录 一.集合介 ...

  10. Java集合框架全解

    Collection 集合 集合接口有2个基本方法: public interface Collection<E> {//向集合中添加元素.如果添加元素确实改变了集合就返回 true, 如 ...

最新文章

  1. Spring MVC 原理探秘 - 一个请求的旅行过程
  2. python punctuation_经验拾忆(纯手工)=gt; Python基本数据类型_Python - UCloud云社区...
  3. linux 内存管理 page fault带来的性能问题
  4. 机器人学习--激光slam简单案例版学习参考(转)
  5. Android Socket编程(多线程、双向通信)
  6. scp跨主机拷贝工具
  7. mysql php 乱码问题_解决php与mysql中文乱码问题
  8. 得到IOleInPlaceActiveObject接口,IOleInPlaceActiveObject::TranslateAccelerator(msg);
  9. LeetCode刷题(Python)——汉明距离
  10. [翻译] SoundManager 音频管理器
  11. .net平台调用(P/Invoking)查询网站
  12. 从程序员到项目经理(28):该死的结果导向(只看结果,不问过程到底行不行?)...
  13. Windows Server 2016 身份管理 (MCSA 认证 70-742)-李海园-专题视频课程
  14. 虚拟服务器共享文件设置,虚拟机共享文件夹设置流程
  15. BZOJ 3699 GAL的数组
  16. arduino mega 2560 针脚说明
  17. 【vm】虚拟机版本管理
  18. Excel自动打开、刷新、保存
  19. 解压压缩包报错:tar: invalid tar magic
  20. Koa2——洋葱模型,简单实现

热门文章

  1. c语言写识别电压的程序,PIC单片机C语言编程实例——交流电压测量
  2. ppt转换成pdf软件免费版
  3. Linkedin领英如何避免封号
  4. 商城小程序源码_商城类小程序制作全过程,无需懂小程序商城源码
  5. 军用加固便携式计算机,PCI/PCIe
  6. 菜鸟python实例_菜鸟学Python,双手奉上老司机给上路新手总结的Python实战问题…...
  7. 影院售票系统-----一个让你有成就感的小项目,只有一丢丢哦
  8. 软件设计说明书模版(申请软件著作权可供参考)
  9. Python+Spark大数据音乐推荐系统
  10. 新闻管理系统(增删改查+分页+阅读+发布评论+删除评论+数据库)