深入剖析java中的集合框架
作者:jingxian 发布时间:2022-04-27 18:48:16
标签:java,集合框架
解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架。
如果启用集合的删除方法,那么集合中所有元素的索引会自动维护。
集合完全弥补了数组的缺陷。
02.集合框架的内容
集合框架都包含三大块内容:对外的接口,接口的实现和对集合运算的算法
01.接口:表示集合的抽象数据类型
02.实现:集合框架中接口的具体实现
03.算法:在一个实现了某个集合框架的接口的对象身上完成某种有用的计算方法
java集合框架简图:
01.Collection接口存在储存一组不唯一(允许重复),无序的对象
02.Set接口继承Collection接口,存储一组唯一(不允许重复),无序的对象
03.List接口继承Collection接口,存储一组不唯一(允许重复),有序(以元素插入的次序来放置元素,不会重新排列)的对象
04.Map接口存储一组成对的键-值对象,提供key(键)到value(值)的映射。Map中的key不要求有序,不允许重复。value同样不要求有序,但允许重复。
05.Iterator接口是负责定义访问和遍历元素的接口。
下面开始介绍:
List接口继承Collection接口,存储一组不唯一(允许重复),有序(以元素插入的次序来放置元素,不会重新排列)的对象
实现List接口的常用类有ArrayList和LinkedList
ArrayList对数组进行了封装,实现了长度可变的数组
LinkedList采用链表存储方式,其优点在于插入,删除元素时效率比较高
01.ArrayList集合类
package cn.day001;
public class Penguin {
private String name="无名氏";
private String sex="Q仔";
public Penguin() {
}
public Penguin(String name, String sex) {
this.name = name;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
测试类:
package cn.day001;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
//上机1 ArrayList集合类
public class Test {
public static void main(String[] args) {
//1.创建多个企鹅对象
Penguin penguin=new Penguin("楠楠","Q仔");
Penguin penguin2=new Penguin("花花","Q妹");
Penguin penguin3=new Penguin("哲哲","Q妹");
//2.创建Arraylist集合对象并把2个企鹅对象放到其中
List<Penguin> penguins=new ArrayList<Penguin>();
penguins.add(penguin);
penguins.add(penguin2);
penguins.add(penguin3);
//3.输出集合中企鹅的数量
System.out.println("共计有"+penguins.size()+"只企鹅");
//4.通过遍历集合显示
for (int i = 0; i < penguins.size(); i++) {
Penguin pg=(Penguin)penguins.get(i);
System.out.println(pg.getName()+"\t"+pg.getSex());
}
//5.删除集合中哲哲企鹅
penguins.remove(penguin3);
//6.判断集合中是否还存在哲哲企鹅
if (penguins.contains(penguin3)) {
System.out.println("存在哲哲企鹅");
}else {
System.out.println("不存在哲哲企鹅");
}
System.out.println();
//7.使用iterator迭代遍历
System.out.println("使用iterator遍历");
Iterator<Penguin> its=penguins.iterator();
while (its.hasNext()) {
Penguin pg =its.next();
System.out.println("名字"+pg.getName()+"\t性别"+pg.getSex());
}
System.out.println();
//8.使用foreach遍历
System.out.println("使用foreach遍历");
for (Penguin pg : penguins) {
System.out.println("名字"+pg.getName()+"\t性别"+pg.getSex());
}
}
}
02.LinkedList集合类
package cn.day001;
import java.util.LinkedList;
//测试LinkedList的多个特殊方法
public class Test2 {
public static void main(String[] args) {
//1.创建多个企鹅对象
Penguin penguin=new Penguin("楠楠","Q仔");
Penguin penguin2=new Penguin("花花","Q妹");
Penguin penguin3=new Penguin("哲哲","Q妹");
//2.创建Arraylist集合对象并把2个企鹅对象放到其中
//List<Penguin> penguins=new ArrayList<Penguin>();
LinkedList<Penguin> penguins=new LinkedList<Penguin>();
penguins.add(penguin);
penguins.add(penguin2);
penguins.add(penguin3);
//3.输出集合中企鹅的数量
System.out.println("共计有"+penguins.size()+"只企鹅");
//4.查看集合中第一只企鹅的昵称
Penguin firstpenguins=penguins.getFirst();
System.out.println("第一只企鹅的昵称是:"+firstpenguins.getName());
//5.查看集合中最后一只企鹅的昵称
Penguin lastpenguins=penguins.getLast();
System.out.println("最后一只企鹅的昵称是:"+lastpenguins.getName());
//6.删除第一只企鹅和最后一只企鹅
penguins.removeFirst();
penguins.removeLast();
System.out.println("删除后企鹅数"+penguins.size());
}
}
2.Map接口
01.HashMap集合类
package cn.day002;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
//上机2 根据宠物昵称查找宠物 上机3 使用iterator迭代遍历
public class Test {
public static void main(String[] args) {
Map<String, String> pet=new HashMap<String, String>();
pet.put("嘻嘻", "狗狗");
pet.put("哈哈", "企鹅");
pet.put("呵呵", "猫猫");
Scanner input=new Scanner(System.in);
System.out.println("请输入宠物昵称:");
String name=input.next();
if (pet.containsKey(name)) {
String * ame=pet.get(name);
System.out.println(name+"对应的宠物"+ * ame);
}else {
System.out.println("对不起,没有此昵称对应的宠物");
}
System.out.println();
//使用iterator迭代遍历
System.out.println("使用iterator遍历");
Set<String> keys=pet.keySet();//取出所有的key的值
Iterator<String> it=keys.iterator();//获取Iteratoer对象
while (it.hasNext()) {
String key = (String) it.next();//取出key值
String pets=pet.get(key);//根据key取出对应的值
System.out.println("key值:"+key+"\tvalue值:"+pets);
}
}
}


猜你喜欢
- 简介 相信很多人都接触spring框架很长时间了,每次搭建spring框架的时候都需要配置好多的jar、xml,做很多繁琐重复的配置,稍微不
- Unity OnOpenAsset在Unity中,OnOpenAsset是一个非常有用的回调函数,它可以在用户双击资源文件时自动打开一个编辑
- 先对问题进行描述:(1)在MyEclipse Servers视图在MyEclipse 10.7.0在某些情况下,可能无法打开。 试图打开视图
- 版本对照各版本的文档说明:https://docs.spring.io/spring-data/elasticsearch/docs/1、在
- 背景知识同步、异步、阻塞、非阻塞首先,这几个概念非常容易搞混淆,但NIO中又有涉及,所以总结一下。同步:API调用返回时调用者就知道操作的结
- 前言当用户向服务器发送了一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求,但是用
- 本文实例为大家分享了javaweb登录验证码的具体代码,供大家参考,具体内容如下使用:Controller:生成验证码@RequestMap
- 目标&背景我们以“处理订单数据”为例,假设我们的应用是一个分布式应用,有"订单应用","物流应用&qu
- 如果需要使用同一类型的多个对象,可以使用数组和集合(后面介绍)。C#用特殊的记号声明,初始化和使用数组。Array类在后台发挥作用,它为数组
- 第一种就是 最常见的 用Try..Catch..再try中强转你要确认的string 类型成功就是int catch 就不是&n
- 好几天没有跟进Spring MVC的学习了,之前看了点源码都忘的差不多了。这次就跟着之前的问题,继续总结下Spring MVC中的小知识。u
- 本文实例为大家分享了Android实现可复用的选择页面的具体代码,供大家参考,具体内容如下窗口代码/** * 根据上一个页面传过来的isMu
- *res/raw和assets的相同点:1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。*res/raw和as
- 背景 我们知道在.NET Framework中存在四种常用的定时器,他们分别是:1 两个是通用的多线程定时器:Syste
- 上篇教程回顾ServerSocket --监听客户端的连接,他的作用主要是建立一个连接-ServerSocket -建立连接,拿到一个Soc
- 本文实例讲述了C#编程实现统计文件夹内文件和隐藏文件的方法。分享给大家供大家参考,具体如下:C#统计文件夹内的文件,包括隐藏文件,显示那个隐
- 本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下自己写的数独游戏,共9关,代码如下:1、DoShudu类用于产生数独
- 之前不怎么了解这个,一直以为做起来很复杂。 直到前两天公司要求要做这个功能。 做了之后才发现 这不过就是一个POST请求就能实现的东西。现在
- 提到Java发送HTTP请求,大家首先想到的是用apache的HttpClient,或者squareup的OkHttp。而在Java11之前
- 在使用foreach时,collection属性值的三种情况:如果传入的参数类型为List时,collection的默认属性值为list,同