第一章 集合框架和泛型

2024-08-30 19:44
文章标签 框架 第一章 集合 泛型

本文主要是介绍第一章 集合框架和泛型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 第一章 集合框架和泛型
    • 1、集合框架
      • 1.List接口的实现类
      • 2.Set接口
      • 3.Map接口
    • 2、泛型集合
    • 3、Collections算法类
      • 1.Collections类常用方法
      • 2.Collections排序

第一章 集合框架和泛型

1、集合框架

Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中

在这里插入图片描述

  • Collection 接口存储一组不唯一,无序的对象 ( Collection下包含List接口、Set接口)
  • List 接口存储一组不唯一有序(插入顺序)的对象
  • Set 接口存储一组唯一,无序的对象
  • Map 接口存储一组键值对象,提供key到value的映射

1.List接口的实现类

List接口下包含ArrayList类、LinkedList类

  • ArrayList 实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
  • LinkedList 采用链表存储方式,插入、删除元素时效率比较高

ArrayList集合类:

  • 确定存储方式:
    • ArrayList类是List接口的一个具体实现类
    • ArrayList对象实现了可变大小的数组
    • 随机访问和遍历元素时,它提供更好的性能
  • 确定存储对象:
    • 创建类型
    • 包含属性
  • 具体实现

ArrayList常用方法:

方法名说明
boolean add(Object o)在列表的末尾顺序添加元素,起始索引位置从0开始
void add(int index,Object o)在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间
int size()返回列表中的元素个数
Object get(int index)返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换
boolean contains(Object o)判断列表中是否存在指定元素
boolean remove(Object o)从列表中删除元素
Object remove(int index)从列表中删除指定位置元素,起始索引位置从0开始

Collection接口常用通用方法还有:clear()、isEmpty()、iterator()、toArray()

  public static void main(String[] args) {ArrayList arrayList = new ArrayList();System.out.println("********add(int index,Object o)指定的索引位置添加元素*************");arrayList.add(0,"a");arrayList.add(1,"b");System.out.println(arrayList);System.out.println("********add(Object o)列表的末尾顺序添加元素,起始索引位置从0开始*************");arrayList.add("c");System.out.println(arrayList);System.out.println("********size()返回列表中的元素个数*************");int num = arrayList.size();System.out.println("列表中元素个数为:"+num);System.out.println("********get(int index)返回指定索引位置处的元素*************");String str = arrayList.get(1).toString();System.out.println(str);System.out.println("********contains(Object o)判断列表中是否存在指定元素*************");boolean bool = arrayList.contains("c");System.out.println(bool);System.out.println("********remove(Object o)从列表中删除元素*************");arrayList.remove("c");System.out.println(arrayList);System.out.println("********remove(int index)从列表中删除指定位置元素*************");arrayList.remove(0);System.out.println(arrayList);System.out.println("********clean()清空集合*************");arrayList.clear();System.out.println("清空后集合长度为:"+arrayList.size());System.out.println("********isEmpty()判断集合是否为空*************");System.out.println("集合是否为空:"+arrayList.isEmpty());}

运行结果:

********add(int index,Object o)指定的索引位置添加元素*************
[a, b]
********add(Object o)列表的末尾顺序添加元素,起始索引位置从0开始*************
[a, b, c]
********size()返回列表中的元素个数*************
列表中元素个数为:3
********get(int index)返回指定索引位置处的元素*************
b
********contains(Object o)判断列表中是否存在指定元素*************
true
********remove(Object o)从列表中删除元素*************
[a, b]
********remove(int index)从列表中删除指定位置元素*************
[b]
********clean()清空集合*************
清空后集合长度为:0
********isEmpty()判断集合是否为空*************
集合是否为空:true

LinkedList集合类:

  • 确定存储方式
    • LinkedList类是List接口的一个具体实现类
    • LinkedList 类用于创建链表数据结构
    • 插入或者删除元素时,它提供更好的性能
  • 具体实现

LinkedList常用方法:

方法名说明
void addFirst(Object o)在列表的首部添加元素
void addLast(Object o)在列表的末尾添加元素
Object getFirst()返回列表中的第一个元素
Object getLast()返回列表中的最后一个元素
Object removeFirst()删除并返回列表中的第一个元素
Object removeLast()删除并返回列表中的最后一个元素
public static void main(String[] args) {LinkedList<String> linkedList = new LinkedList<>();linkedList.add("a");linkedList.add("b");linkedList.add("c");System.out.println(linkedList);System.out.println("********addFirst(Object o)在列表的首部添加元素*********");linkedList.addFirst("x");System.out.println(linkedList);System.out.println("********addLast(Object o)在列表的末尾添加元素*********");linkedList.addLast("e");System.out.println(linkedList);System.out.println("********getFirst()返回列表中的第一个元素*********");System.out.println("列表中第一个元素为:"+linkedList.getFirst());System.out.println("********getLast()返回列表中的最后一个元素*********");System.out.println("列表中第一个元素为:"+linkedList.getLast());System.out.println("********removeFirst()删除并返回列表中的第一个元素*********");System.out.println("删除的元素是:"+linkedList.removeFirst());System.out.println("删除后列表元素为:"+linkedList);System.out.println("********removeLast()删除并返回列表中的最后一个元素*********");System.out.println("删除的元素是:"+linkedList.removeLast());System.out.println("删除后列表元素为:"+linkedList);}

运行结果:

[a, b, c]
********addFirst(Object o)在列表的首部添加元素*********
[x, a, b, c]
********addLast(Object o)在列表的末尾添加元素*********
[x, a, b, c, e]
********getFirst()返回列表中的第一个元素*********
列表中第一个元素为:x
********getLast()返回列表中的最后一个元素*********
列表中第一个元素为:e
********removeFirst()删除并返回列表中的第一个元素*********
删除的元素是:x
删除后列表元素为:[a, b, c, e]
********removeLast()删除并返回列表中的最后一个元素*********
删除的元素是:e
删除后列表元素为:[a, b, c]

**ArrayList:**内部使用数组实现,遍历查询效率高

**LinkedList:**内部使用双向链表实现,增删改效率高

2.Set接口

  • Set接口存储一组唯一,无序的对象
  • HashSet是Set接口常用的实现类
  • Set中存放对象的引用
  • Set接口不存在下标和get()方法
Set set=new HashSet();
String s1=new String("java");
String s2=s1;
String s3=new String("JAVA");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size());

Set接口如何判断加入对象是否已经存在

采用对象的equals()方法比较两个对象是否相等

boolean bool = s1.equals(s2);
System.out.println(bool);

运行结果:

2
true

迭代器:

Collection 接口的iterator()方法创建 Iterator 对象

如何遍历Set集合:

  • 通过迭代器Iterator实现遍历

    • 获取Iterator :Collection 接口的iterator()通过迭代器Iterator实现遍历方法
    //使用迭代器
    Iterator it = set.iterator();
    //循环迭代器
    while (it.hasNext()) {String next = it.next();System.out.println(next);//获取元素
    }
    
    • Iterator对象方法:

      boolean hasNext(): 判断是否存在另一个可访问的元素

      Object next(): 返回要访问的下一个元素

  • 增强型for循环

for(Object object:set){System.out.println(object);
}
  • 使用collection中的toArray()方法遍历
Object[] arr = set.toArray();
for (int i = 0; i < arr.length; i++) {String s = (String) arr[i];System.out.println(s);
}
  • 使用collection中的toArray( T[ ] t)方法遍历
 Object[] arr1 = new String[set.size()];arr1 = set.toArray(arr1);for (int i = 0; i < arr1.length; i++) {System.out.println("----" + arr1[i]);}

3.Map接口

Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作,最常用的实现类是HashMap

Map接口常用方法:

方法名说明
Object put(Object key, Object val)以“键-值”对的方式进行存储
Object get(Object key)根据键返回相关联的值,如果不存在指定的键,返回null
Object remove(Object key)删除由指定的键映射的“键-值对”
int size()返回元素个数
Set keySet()返回键的集合
Collection values()返回值的集合
boolean containsKey(Object key)如果存在由指定的键映射的“键-值对”,返回true
public static void main(String[] args) {Map map = new Map();System.out.println("******put(Object key, Object val)以“键-值”对的方式进行存储**********");map.put("姓名","张三");map.put("年龄",18);System.out.println(map);System.out.println("******get(Object key)根据键返回相关联的值**********");System.out.println(map.get("姓名"));System.out.println(map.get("年龄"));System.out.println("******remove(Object key)删除由指定的键映射的“键-值对”**********");map.remove("年龄");System.out.println("删除后:"+map);System.out.println("******size()返回元素个数**********");System.out.println("map内的元素个数:"+map.size());System.out.println("添加一组元素...");map.put("性别","男");System.out.println(map);System.out.println("map内的元素个数:"+map.size());System.out.println("******keySet()返回键的集合**********");System.out.println(map.keySet());System.out.println("******values()返回值的集合**********");System.out.println(map.values());System.out.println("******containsKey(Object key)是否存在由指定的键映射的“键-值对”**********");System.out.println(map.containsKey("姓名"));}

运行结果:

******put(Object key, Object val)以“键-值”对的方式进行存储**********
{姓名=张三, 年龄=18}
******get(Object key)根据键返回相关联的值**********
张三
18
******remove(Object key)删除由指定的键映射的“键-值对”**********
删除后:{姓名=张三}
******size()返回元素个数**********
map内的元素个数:1
添加一组元素...
{姓名=张三, 性别=}
map内的元素个数:2
******keySet()返回键的集合**********
[姓名, 性别]
******values()返回值的集合**********
[张三,]
******containsKey(Object key)是否存在由指定的键映射的“键-值对”**********
true

遍历Map集合:

  • 通过迭代器Iterator实现遍历
//通过迭代器Iterator实现遍历
System.out.println("通过Map.entrySet使用iterator遍历key和value:");
Iterator<Maps.Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {Maps.Entry<String, String> entry = iterator.next();System.out.println(entry.getKey() + ": " + entry.getValue());
}
  • 增强型for循环
//增强型for循环
System.out.println("通过Map.entrySet遍历key和value");
for (Map.Entry<String, String> entry : map.entrySet()) {System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
  • 键值对
//键值对
System.out.println("通过Map.keySet遍历key和value:");
for (String key : map.keySet()) {System.out.println("key= "+ key + " and value= " + map.get(key));
}System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {System.out.println("value= " + v);
}

注意:

不能直接拿map的key值作为迭代器进行遍历

每一个键值对也就是一个Entry

Map.Entry() 返回的是当前Map的item,但是这个方法只在遍历的时候有用

map.entrySet()方法,返回的是当前Map的 item Set集合

Map.Entry中提供了getKey()和getValue()方法,这两个方法的作用很明显一个获得key一个获得value

2、泛型集合

将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性、本质是参数化类型。

泛型集合可以约束集合内的元素类型

典型泛型集合 ArrayList<E>、HashMap<K,V>

  • <E>、<K,V>表示该泛型集合中的元素类型

  • 泛型集合中的数据不再转换为Object

把数据类型作为参数进行传递

传递的数据类型必须是引用数据类型

3、Collections算法类

Collections类定义了一系列用于操作集合的静态方法
在这里插入图片描述

1.Collections类常用方法

  • Collections和Collection不同,前者是集合的操作类,后者是集合接口

  • Collections提供的常用静态方法:

    sort():排序

    max()\min():查找最大\最小值

2.Collections排序

  • Collections类可以对集合进行排序、查找和替换操作
  • 实现一个类的对象之间比较大小,该类要实现Comparable接口:重写compareTo()方法

这篇关于第一章 集合框架和泛型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1121755

相关文章

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

Spring Framework系统框架

序号表示的是学习顺序 IoC(控制反转)/DI(依赖注入): ioc:思想上是控制反转,spring提供了一个容器,称为IOC容器,用它来充当IOC思想中的外部。 我的理解就是spring把这些对象集中管理,放在容器中,这个容器就叫Ioc这些对象统称为Bean 用对象的时候不用new,直接外部提供(bean) 当外部的对象有关系的时候,IOC给它俩绑好(DI) DI和IO