[Java]Set、Map、List常见实现类的特点、使用方法总结

文章目录

  • 1、图谱
  • 2、List
    • 1、ArrayList
      • 1. 特点
      • 2. 常见方法
    • 2、LinkedList
      • 1、特点
      • 2、常见方法
    • 3、Vector
      • 1、特点
  • 3、Map
    • 1、HashMap
      • 1、特点
      • 常用方法
    • 2、TreeMap
      • 1、特点
    • 3、LinkedHashMap
      • 1、特点
  • 4、Set
    • 1、HashSet
      • 1 、特点
      • 2、常用方法
    • 2、LinkedHashSet
      • 特点
    • 3、TreeSet
      • 1、特点
      • 2、使用
  • 5、List和Set的区别

1、图谱

在这里插入图片描述

2、List

1、ArrayList

1. 特点

在这里插入图片描述

2. 常见方法

①.add(Object element) 向列表的尾部添加指定的元素。
②.size() 返回列表中的元素个数。
③.get(int index) 返回列表中指定位置的元素,index从0开始。

public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>(); //<String>泛型表示集合中存的是字符串形式的元素。list.add("yh"); //add()用于向List集合容器中添加元素。list.add("z");System.out.println(list);System.out.println(list.size()); //size()用于获取集合中有多少个元素。System.out.println(list.get(1)); //get()获取指定索引(从0开始)位置的元素。}
}

④.add(int index, Object element) 在列表的指定位置(从0开始)插入指定元素

public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.add("yh");list.add("z");System.out.println(list);list.add(1, "gc"); //在指定位置添加元素,原来位置的元素后置。System.out.println(list);}
}

⑤.set(int i, Object element) 使用元素element替换索引i位置的元素,并返回被替换的元素。

public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.add("yh");list.add("z");System.out.println(list);list.set(1, "wd"); //替换指定位置的元素,从0开始,替换了“wd”。System.out.println(list);}
}

⑥.clear() 从列表中移除所有元素。
⑦.isEmpty() 判断列表是否包含元素,不包含元素则返回 true,否则返回false。

public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.add("yh");list.add("z");System.out.println(list);list.clear(); //清空List集合中的所有元素。System.out.println(list.isEmpty()); //集合容器没有元素,则true。System.out.println(list);}
}

⑧.contains(Object o) 如果列表包含指定的元素,则返回 true。
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(“yh”);
list.add(“z”);
boolean flag = list.contains(“yh”); //用来判断集合容器中是否含有参数元素。
System.out.println(flag);
}
}
⑨.remove(int index) 移除列表中指定位置的元素,并返回被删元素,删除位置后面的元素(如果有)向前移动。

public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.add("yz");list.add("h");list.add("hb");System.out.println(list.remove(1)); //删除指定索引(从0开始)位置的元素,并将元素返回,并后面元素前移。System.out.println(list);}
}

⑩ .iterator() 返回按适当顺序在列表的元素上进行迭代的迭代器。

public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.add("y");list.add("zh");Iterator<String> ite = list.iterator(); //将List集合中元素转到iterator变量中。while(ite.hasNext()) //hasNext()判断当前“指针”下面是否还有元素的方法,java中没有指针,这只是举个例子。{System.out.println(ite.next()); //如果“指针”下面有元素,则移动“指针”并获取相应位置的元素。}}
}

2、LinkedList

1、特点

在这里插入图片描述

2、常见方法

①.添加
boolean add(Object element) 它将元素附加到列表的末尾。
boolean add(int index,Object element) 指定位置插入。
void addFirst(E element) 元素附加到列表的头部
void addLast(E element) 元素附加到列表的尾部

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
linkedList.addFirst(4);
linkedList.addFirst(5);
linkedList.addLast(6);
linkedList.add(2,9);
System.out.println(linkedList);

输出:

[5, 4, 9, 1, 2, 3, 6]

②:获取数据
Object get(int index) 根据下标获取数据
Object getFirst() 它返回链表的第一个元素。
Object getLast() 它返回链接列表的最后一个元素。

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
System.out.println("获取下标为1的元素:"+linkedList.get(1));
System.out.println("链表的第一个元素:"+linkedList.getFirst());
System.out.println("链表的最后一个元素:"+linkedList.getLast());

③.查询
boolean contains(Object element)如果元素存在于列表中,则返回true。

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
linkedList.add(1);
System.out.println("是否出现过元素1:"+linkedList.contains(1));
System.out.println("是否出现过元素4:"+linkedList.contains(4));

输出

是否出现过元素1true
是否出现过元素4:false

④.修改
Object set(int index,Object element)它用于用新元素替换列表中的现有元素

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
linkedList.add(1);
linkedList.set(1,9);
System.out.println("更新过的链表:"+linkedList);

结果:

更新过的链表:[1, 9, 3, 1]

⑤.删除
E remove() 删除第一个元素
E remove(int location) 删除指定位置的元素
E removeFirst() 删除并返回链接列表的头部一个元素
E removeLast() 删除并返回链接列表的尾部一个元素

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
linkedList.add(1);
linkedList.remove(); //删除第一个元素
linkedList.remove(2);//删除指定位置的元素
System.out.println(linkedList);

⑦.链表长度

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
linkedList.add(1);
System.out.println("链表的长度:"+linkedList.size());

输出:

链表的长度:4

3、Vector

1、特点

在这里插入图片描述

3、Map

1、HashMap

1、特点

在这里插入图片描述

常用方法

①.put(K key, V value) 将键(key)/值(value)映射存放到Map集合中

public class Test {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("Tom", 100);//向HashMap中添加元素  }
}

②.get(Object key) 返回指定键所映射的值,没有该key对应的值则返回 null,即获取key对应的value。

public class Test {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("Tom", 100);map.put("Tom", 0);int score = map.get("Tom");// 获取key对应的valueSystem.out.println(score);// key不允许重复,若重复,则覆盖已有key的value}
}

在这里插入图片描述
③. size() 返回Map集合中数据数量,准确说是返回key-value的组数。

public class Test {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("Tom", 100);map.put("Jim", 90);map.put("Sam", 91);System.out.println(map.size());}
}

④:isEmpty () 判断Map集合中是否有数据,如果没有则返回true,否则返回false

public class Test {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("Tom", 100);map.put("Jim", 90);map.put("Sam", 91);map.clear();// 清空map中的key-valueSystem.out.println(map.isEmpty());}
}

⑤:remove(Object key) 删除Map集合中键为key的数据并返回其所对应value值。

public class Test {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("Tom", 100);map.put("Jim", 90);map.put("Sam", 91);map.remove("Tom");System.out.println(map);}
}

⑥:containsKey(Object key) Hashmap判断是否含有key

public class Test {public static void main(String[] args) {HashMap<String, Integer> map=new HashMap<>();/*boolean*///判断map中是否存在这个keySystem.out.println(map.containsKey("DEMO"));//falsemap.put("DEMO", 1);System.out.println(map.containsKey("DEMO"));//true}
}

⑦:containsValue(Object value) Hashmap判断是否含有value:

public class Test {public static void main(String[] args) {HashMap<String, Integer> map=new HashMap<>();/*boolean*///判断map中是否存在这个valueSystem.out.println(map.containsValue(1));//falsemap.put("DEMO", 1);System.out.println(map.containsValue(1));//true}
}

2、TreeMap

1、特点

在这里插入图片描述

3、LinkedHashMap

1、特点

LinkedHashMap的源码部分如下:

public class LinkedHashMap<K,V>extends HashMap<K,V>implements Map<K,V>

可以看出LinkedHashMap是HashMap子类,它的多种操作都是建立在HashMap操作的基础上的。同HashMap不同的是,LinkedHashMap维护了一个Entry的双向链表,保证了插入的Entry中的顺序。这也是Linked的含义。除了有序外,其他和HashMap一样。如下图,
在这里插入图片描述

4、Set

1、HashSet

1 、特点

在这里插入图片描述

2、常用方法

①:add(Object o):向Set集合中添加元素,不允许添加重复数据。
②:size():返回Set集合中的元素个数

public class Test {public static void main(String[] args) {HashSet<String> set = new HashSet<String>(); //调用HashSet无参构造方法——>创建HashMap对象并给map全局变量。set.add("yh");set.add("hz");System.out.println(set);System.out.println(set.size());}
}

注意:不会按照保存的顺序存储数据(顺序不定),遍历时不能保证下次结果和上次相同。且向HashSet集合中添加元素,HashSet add方法实质是map全局变量调用了put方法,将数据存到了key,因为HashMap的 key不允许重复,所以HashSet添加的元素也不允许重复。

③.remove(Object o): 删除Set集合中的obj对象,删除成功返回true,否则返回false。
④.isEmpty():如果Set不包含元素,则返回 true。

public class Test {public static void main(String[] args) {HashSet<String> set = new HashSet<String>();set.add("yh");set.add("hz");System.out.println(set.isEmpty());System.out.println(set.remove("yh"));System.out.println(set);}
}

⑤.contains(Object o):判断集合中是否包含obj元素。

public class Test {public static void main(String[] args) {HashSet<String> set = new HashSet<String>();set.add("yh");set.add("hz");System.out.println(set.contains("yh"));}
}

⑥:加强for循环遍历Set集合:

public class Test {public static void main(String[] args) {HashSet<String> set = new HashSet<String>();set.add("yh");set.add("hz");for (String name : set) {   //使用foreach进行遍历。System.out.println(name);}}
}

2、LinkedHashSet

特点

在这里插入图片描述

3、TreeSet

1、特点

在这里插入图片描述

2、使用

①.插入是按字典序排序的

public class Test {public static void main(String[] args) {TreeSet ts=new TreeSet();ts.add("agg");ts.add("abcd");ts.add("ffas");Iterator it=ts.iterator();while(it.hasNext()) {System.out.println(it.next());}}
}

结果:按照字典序排序的方式进行排序

abcd
agg
ffas

②.如果插入的是自定义对象 需要让类实现 Comparable 接口并且必须要重写compareTo

class Person implements Comparable{String name;int age;Person(String name,int age){this.name=name;this.age=age;}@Overridepublic int compareTo(Object o) {Person p=(Person)o;//先对姓名字典序比较 如果相同 比较年龄if(this.name.compareTo(p.name)!=0) {return this.name.compareTo(p.name);}else{if(this.age>p.age) return 1;else if(this.age<p.age) return -1;}return 0;}}public class Test {public static void main(String args[]){TreeSet ts=new TreeSet();ts.add(new Person("agg",21));ts.add(new Person("abcd",12));ts.add(new Person("ffas",8));ts.add(new Person("agg",12));Iterator it=ts.iterator();while(it.hasNext()){Person p=(Person)it.next();System.out.println(p.name+":"+p.age);}}
}

结果:

abcd:12
agg:12
agg:21
ffas:8

5、List和Set的区别

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SEED实验复现

SEED 项目由雪城大学教授杜文亮于 2002 年启动雪城大学。它由美国总共1万美元资助 美国国家科学基金会。现在&#xff0c;SEED 实验室正在被超过 全球数千个研究所。SEED 代表 &#xff08;SEcurity EDucaton&#xff09;。 https://github.com/seed-labs/seed-labs 该项目使用…

C++牛客WebServer项目学习笔记一

1.Linux系统命令&#xff1a; sudo apt install softname # sudo 管理员权限&#xff1b;apt 安装软件命令&#xff1b;ps -ef | grep ssh # ps 查看进程命令&#xff1b;| 管道符&#xff1b;grep 过滤出&#xff08;过滤出ssh关键词&#xff09;&#xff1b; 3.Ctrl滚动鼠标…

Qt添加第三方字体

最近开发项目时&#xff0c;据说不能用系统自带的微软雅黑字体&#xff0c;于是找一个开源的字体&#xff0c;思源黑体&#xff0c;这个是google和Adobe公司合力开发的可以免费使用。本篇记录一下Qt使用第三方字体的方式。字体从下载之家下载http://www.downza.cn/soft/266042.…

Python爬虫——urllib_微博cookie登陆

cookie登陆适用场景&#xff1a; 适用场景&#xff1a;数据采集的时候&#xff0c;需要绕过登陆&#xff0c;然后进入到某个页面 # 适用场景&#xff1a;数据采集的时候&#xff0c;需要绕过登陆&#xff0c;然后进入到某个页面 import urllib.requesturl https://weibo.cn/7…

【解决】Android Studio打包出现not found for signing config ‘externalOverride‘

问题出现场景 之前我的这个项目在另一台电脑上开发&#xff0c;现在迁移到这台计算机上&#xff0c;出现了key报错的问题&#xff0c;网络上有些说需要在XML中进行配置signature相关的内容&#xff0c;这个感觉比较复杂&#xff0c;本文主要介绍一个简单的解决方法&#xff0c;…

SOT封装特点和优势,sot23封装尺寸

SOT封装是一种常用的集成电路封装类型&#xff0c;常见的SOT封装类型包括3引脚&#xff08;如SOT-23&#xff09;、4引脚&#xff08;如SOT-89和SOT-223&#xff09;和6引脚&#xff08;如SOT-363&#xff09;&#xff0c;可以适应不同的电路设计和功能要求。具有以下特点和优势…

机械设计制造及其自动化专业向PLC方向发展的可行性

是的&#xff0c;机械设计制造及其自动化专业往PLC&#xff08;可编程逻辑控制器&#xff09;方向发展是可行的。PLC是一种用于控制和自动化各种机械设备和工业过程的计算机控制系统。它被广泛应用于工业自动化领域&#xff0c;包括制造业、能源行业、交通运输等。 我这里刚好…

提示工程师:如何写好Prompt

提示工程由来 提示工程是一门相对较新的学科&#xff0c;用于开发和优化提示以有效地将语言模型 (LM) 用于各种应用程序和研究主题。 研究人员使用提示工程来提高 LLM 在广泛的常见和复杂任务&#xff08;例如问题回答和算术推理&#xff09;上的能力。 开发人员使用提示工程…

JavaWeb(4)——HTML、CSS、JS 快速入门

一、JavaScript 数组 数组筛选&#xff08;查找&#xff0c;将原来数组中的某些数据去除&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&quo…

接下来讲一讲Vue的数据代理

首先讲一下原生js的数据代理 原生的 Object.defineProperty() let aa wewewlet person {name: "王李斌",age: 12} Object.defineProperty(person, "address", {// value: 14&#xff0c; 给字段设置值//enumerable:true, 设置动态设置的字段为可以遍历/…

心电前置放大电路制作与原理详细分析(附电路板实物图)

心电前置放大电路制作与原理详细分析(附电路板实物图) 实验目的实验结果实验电路图原理解释与计算实验测试过程实验参数测量实验洞洞板焊接实验目的 心电信号具有微弱、低频、和高阻抗等特性,极其容易受到干扰。为了实现心电信号的放大,前置放大器需要满足高输入阻抗、高共…

Java List集合 -- 最常用的两种排序方法

现在有一个类 public class Person {private int id;private int age;private String name;public Person(int id, int age, String name) {this.id id;this.age age;this.name name;}public int getId() {return id;}public int getAge() {return age;}public String getN…

基于STM32的homeassistant(采用FreeRTOS操作系统)【第一、二章优化拓展:Wifi、服务器连接验证以及UASRT串口区分】

第一、二章优化拓展开发环境&#xff1a; 主控STM32F103C8T6WIFI模块ESP01S开发语言C开发编译器 KEIL 组网方式WIFI服务器协议MQTT 硬件连接 STM32ESP01S3.3V3.3V GND GND GPIO2 (USRAT2-TX) RXGPIO3 (USART3-RX)TX 本章要点&#xff1a; 对ESP01S的AT指令的反馈指令进…

【Go】实现一个代理Kerberos环境部分组件控制台的Web服务

实现一个代理Kerberos环境部分组件控制台的Web服务 背景安全措施引入的问题SSO单点登录 过程整体设计路由反向代理登录会话组件代理YarnHbase 结果 背景 首先要说明下我们目前有部分集群的环境使用的是HDP-3.1.5.0的大数据集群&#xff0c;除了集成了一些自定义的服务以外&…

vite 引入局部组件 必须带.vue

11:03:47 AM [vite] Internal server error: Failed to resolve import “./components/layoutsHeader” from “src/views/layouts/layouts.vue”. Does the file exist? 在这里插入图片描述

ADC 的初识

ADC介绍 Q: ADC是什么&#xff1f; A: 全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 ADC的性能指标 量程&#xff1a;能测量的电压范围分辨率&#xff1a;ADC能辨别的最小模拟量&#xff0c;通常以输出二进制数的位数表示&#xff0c;比如&am…

ENSP实验一:防火墙基础配置

1、搭建拓扑图 配置client&#xff08;内网&#xff09;、FTP Server&#xff08;外网&#xff09;的IP地址 客户端设置&#xff1a; 服务端设置&#xff1a; 2、配置防火墙命名 进入防火墙&#xff0c;输入密码&#xff1a;默认为admin123 <USG6000V1>system-view /…

计算机网络 day8 动态路由 - NAT - SNAT实验 - VMware的网卡的3种模式

目录 动态路由&#xff1a;IGP 和 EGP 参考网课&#xff1a;4.6.1 路由选择协议概述_哔哩哔哩_bilibili ​编辑 IGP&#xff08;Interior Gateway Protocol&#xff09;内部网关协议&#xff1a; EGP&#xff08;Interior Gateway Protocol&#xff09;外部网关协议&#x…

【论文阅读】聚集多个启发式信号作为监督用于无监督作文自动评分

摘要 本文提出一个新的无监督的AES方法ULRA&#xff0c;它不需要真实的作文分数标签进行训练&#xff1b;ULRA的核心思想是使用多个启发式的质量信号作为伪标准答案&#xff0c;然后通过学习这些质量信号的聚合来训练神经自动评分模型。为了将这些不一致的质量信号聚合为一个统…

vue代码格式化,Prettier - Code formatter格式化规则文件

vue2&#xff0c;vue3格式化代码使用方法&#xff1a; 1、新建文件名&#xff1a; .prettierrc.cjs&#xff0c;里面放上下面的代码片段&#xff0c;直接粘贴即可 2、把 .prettierrc.cjs文件放在项目的根目录中 // prettier的默认配置文件 module.exports {// 一行最多 100 …