LinkedList和Set

2023-05-16

LinkedList和Set

1. LinkedList

1.1 LinkedList概述
底层存储数据是一个双向链表结构
	自行车链子 就是一个生活中链表结构,环环相扣,替换,拆除非常方便

在这里插入图片描述

在这里插入图片描述

1.2 LinkedList需要了解的方法
	LinkedList使用的方法都是从List接口实现而来的方法,需要了解的是LinkedList特有方法:
	boolean addFirst(E e);
		在当前链表开始位置加元素
	boolean addLast(E e);
		在当前链表末尾添加元素
	E getFirst();
		获取第一个Node节点元素数据
	E getLast();
		获取末尾Node节点元素数据
	E removeFirst();2
		删除头节点
	E removeLast();
		删除末尾节点
1.3 LinkedLast方法演示
package com.qfedu.a_linkedlist;

import java.util.LinkedList;

/**
 * LinkedList常用方法
 * @author Anonymous
 *
 */
public class Demo1 {
	public static void main(String[] args) {
		LinkedList<String> list = new LinkedList<String>();
		
		list.add("汉堡王");
		list.add("KFC");
		list.add("德克士");
		list.add("麦当劳");
		list.add("华莱士");
		
		System.out.println(list);
		
		list.addFirst("乡村汉堡");
		
		System.out.println(list);
		
		list.addLast("正新鸡排");
		
		System.out.println(list);
		
		String last = list.removeLast();
		System.out.println(last);
		System.out.println(list);
		
		String first = list.removeFirst();
		System.out.println(first);
		System.out.println(list);
		
		System.out.println(list.getFirst());
		System.out.println(list.getLast());
	}
}	

2. Set集合

2.1 Set接口概述
Set接口数据存储
	1. 无序
	2. 不可重复

无序
	添加顺序和存储不一致!!!
不可重复
	Set存储的元素不允许出现重复情况
	
HashSet
	底层存储数据的结构是哈希表
TreeSet
	底层存储数据的结构是[平衡二叉树]

	Set集合使用的方法都是Collection接口中的方法,没有特殊方法
	但是Set接口中两个重要的实现类HashSet和TreeSet存储过程中,需要依赖于其他方法的实现和要求。
2.2 HashSet【重点】
2.2.1 HashSet概述
HashSet底层存储数据的结构是一个哈希表是一个表结构
	表结构,我们可以认为是Excel表格
		存在坐标关系 ,每一个单元格坐标唯一!!!

HashSet存储过程中,需要涉及到添加元素的hashCode方法,有可能也会涉及到equals方法。
	equals方法情况需要我们避免。
2.2.2 HashSet代码演示
package com.qfedu.b_set;

import java.util.HashSet;

public class Demo1 {
	public static void main(String[] args) {
		HashSet<Person> set = new HashSet<Person>();
		
		Person p1 = new Person(1, "骚磊", 16);
		Person p2 = new Person(2, "骚杰", 66);
		Person p3 = new Person(3, "茂林", 15);
		Person p4 = new Person(4, "大熊", 45);
		Person p5 = new Person(5, "康爷", 14);
		Person p6 = new Person(6, "宝哥", 60);
		Person p7 = new Person(6, "宝哥", 60);
		
		/*
		 * Set集合中添加顺序和存储顺序不一致
		 * 415362
		 * 
		 * Set集合当中元素不可以重复
		 */
		set.add(p6);
		set.add(p5);
		set.add(p2);
		set.add(p4);
		set.add(p3);
		set.add(p1);
		set.add(p7);
		
		System.out.println(set);
		System.out.println(set.size());
	}
}
2.2.3 hashCode和equals方法角色【重点】
发现:
	1. 元素添加多少个,hashCode方法执行多少次
	2. 添加相同元素,会执行equals方法

在这里插入图片描述

2.3 TreeSet
2.3.1 什么是树形结构

在这里插入图片描述

2.3.2 TreeSet代码演示
package com.qfedu.b_set;

import java.util.TreeSet;

/*
 * TreeSet存储数据演示
 */
public class Demo2 {
	public static void main(String[] args) {
		TreeSet<String> set1 = new TreeSet<String>();
		
		set1.add("我");
		set1.add("你");
		set1.add("他");
		set1.add("嘿嘿嘿");
		set1.add("哇呜");
		
		System.out.println(set1);
		
		TreeSet<Integer> set2 = new TreeSet<Integer>();
		
		set2.add(1);
		set2.add(3);
		set2.add(2);
		set2.add(6);
		set2.add(5);
		set2.add(7);
		System.out.println(set2);
		
		TreeSet<Person> personSet = new TreeSet<Person>();
		
		/*
		 * Person类对象存储失败,因为Person类没有对应的比较方式
		 * 而TreeSet每一个存储的元素都需要有对应的比较方式或者自然顺序
		 */
		personSet.add(new Person(1, "骚磊", 16));
		personSet.add(new Person(2, "骚杰", 66));
		personSet.add(new Person(3, "锤石", 26));
		personSet.add(new Person(4, "维鲁斯", 36));
		personSet.add(new Person(5, "巴德", 56));
		personSet.add(new Person(6, "马尔扎哈", 76));
	}
}
2.3.3 比较方式完成
TreeSet集合存储元素需要自然顺序或者【比较方式】,Person类没有比较方式
	1. Person类遵从Comparable<T>接口,实现compareTo方法
		public int compareTo(T t);
	2. 给TreeSet添加插件,比较方式插件,在创建TreeSet对象过程中,传入一个
	Comparator<T>接口实现类对象,实现compare方法
    	public int compare(T o1, T o2);
Comparable接口
/*                                                              
 * 该方法是Person类遵从Comparable<T>接口实现的方法,因为需要进行大小,比较的
 * 内容明确是Person类型。那么在遵从接口时,直接约束泛型对应的具体数据类型为Person类型              
 *                                                              
 * 该方法返回值类型为int类型,
 * 		负数  前者数据小于后者数据 
 * 		正数  前者数据大于后者数据  
 * 		0  两个元素大小一致,后者无法添加
 *                                                              
 * 该方法会在当前Person类对象需要进行排序操作时,自行调用。     
 * 比如 TreeSet结构添加过程中,就调用compareTo方法进行比较判断            
 */                                                             
@Override                                                       
public int compareTo(Person o) {                                
	System.out.println(this.name + "compareTo方法被调用" + o.name);  
	return o.age- this.age;                                     
}                                                               
```java
package com.qfedu.c_compare;

import java.util.Comparator;

import com.qfedu.b_set.Person;

/*
 * 自定义比较器类,遵从Comparator接口,实现compare方法
 * 
 * 这里完成的是一个针对Person类型的比较器,并不是存在与Person类内
 * Comparator Java中提供的比较器接口
 * 
 * 【核心】
 * 		是o1.getAge() - o2.getAge();
 * 		只不过在一个方法compare内
 * 		方法又在一个类中
 * 		类想要执行该方法,需要一个类对象
 * 
 */
public class PersonCompare implements Comparator<Person> {
	@Override
	public int compare(Person o1, Person o2) {
		System.out.println("Comparator的compare方法");
		return o1.getAge() - o2.getAge();
	}

Comparable接口
package com.qfedu.c_compare;

import java.util.Comparator;

import com.qfedu.b_set.Person;

/*
 * 自定义比较器类,遵从Comparator接口,实现compare方法
 * 
 * 这里完成的是一个针对Person类型的比较器,并不是存在与Person类内
 * Comparator Java中提供的比较器接口
 * 
 * 【核心】
 * 		是o1.getAge() - o2.getAge();
 * 		只不过在一个方法compare内
 * 		方法又在一个类中
 * 		类想要执行该方法,需要一个类对象
 * 
 */
public class PersonCompare implements Comparator<Person> {
	@Override
	public int compare(Person o1, Person o2) {
		System.out.println("Comparator的compare方法");
		return o1.getAge() - o2.getAge();
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LinkedList和Set 的相关文章

  • Node JS,传统数据结构? (如 Set 等),类似于 Node 的 Java.util 之类的东西? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我喜欢 Node JS 并且有 Java 背景 甚至有兴趣在某些 Node 看起来有点牵强的项目中尝试
  • 解析和计算布尔集定义

    说我有一套S定义为字符串 例如如下 S A or B and not A and C 其中 A B 和 C 是有限集 例如 A 0 1 B 0 2 C 1 3 如果我们分析S一步一步 我们有 A or B 0 1 2 A C 1 not A
  • Python:测试空集交集而不创建新集

    我经常发现自己想要测试两个集合的交集而不使用交集的结果 set1 set 1 2 set2 set 2 3 if set1 set2 print Non empty intersection else print Empty interse
  • 创建“集合字典”

    我需要将数据有效地存储在类似于 集合字典 的东西中 例如有一个字典 其中包含与每个唯一键匹配的多个 唯一 值 我的数据源是一个 不是很好 结构化的 XML 我的想法是 我将浏览许多元素并找到关键 如果key不存在 则将其添加到字典中 如果已
  • 在 std::list 上使用擦除时的 C++ 分段

    我正在尝试使用以下命令从 C 链接列表中删除项目erase和一个列表迭代器 include
  • Python:如何获取仅出现在一组列表中的一组中的项目?

    我想创建一个函数 它接受一个或多个集合的列表 并查找列表中所有集合的对称差异 即结果应该是一组值 每个值仅包含在其中一个值中套 如果我对对称差异的理解是错误的 请纠正我 例如 gt gt gt s1 set 1 2 3 gt gt gt s
  • 对链接列表进行排序

    我用 C 编写了一个基本的链表类 它有一个 Node 对象 它 显然 代表列表中的每个节点 代码中没有使用IEnumerable 但是我可以实现排序功能吗 我使用的语言是C C 中有这样的例子吗 我正在从这个工作sample http ww
  • 何时使用 HashMap 而不是 LinkedList 或 ArrayList,反之亦然

    为什么我们不能总是使用 HashMap 尽管它在添加 删除操作上比 ArrayList 或 LinkedList 高效得多 而且与元素的数量无关 我用 google 搜索了一下 发现了一些原因 但使用 HashMap 总有一种解决方法 而且
  • Java ArrayList 和 LinkedList - 在末尾添加元素实现细节

    我对为什么 arraylist 比链表更快的理解是 使用 arraylist 基本上只需要一个操作 更新末尾数组元素的引用 而使用链表你必须做更多的事情 例如创建一个新节点 更新 2 个引用 遍历链表并更新最后一个节点以指向新节点等 但是我
  • 查找列表中不常见的元素

    我正在尝试编写一段可以自动分解表达式的代码 例如 如果我有两个列表 1 2 3 4 和 2 3 5 代码应该能够找到两个列表 2 3 中的公共元素 并组合其余的元素元素一起组成一个新列表 即 1 4 5 从这篇文章 如何找到列表交集 htt
  • 计算字符串中的常见字符 Python

    该代码的输出仍然是 4 但是 输出应该是 3 存在集合交集 因为我相信这是答案的关键 答案是 4 而不是 3 的原因来自于 s1 中与 s2 匹配的 2 个 qs 和 1 个 r 的数量 s2 qsrqq s1 qqtrr counts1
  • 是否可以反转包含循环的链表?

    我正在看一些面试问题 其中一个要求反转包含循环的链表 所以假设我有一个如下所示的链接列表 F lt E V A gt B gt C gt D 然后反转列表将创建以下内容 F gt E V A lt B lt C lt D 这里的问题是 C
  • C 中链表的插入排序?

    我尝试寻找与我类似的问题 但没有找到太多帮助 我有一个此类结构的链接列表 struct PCB struct PCB next int reg1 reg2 我首先创建 10 个 PCB 结构 以这种方式链接在一起 for i 20 i lt
  • 如何在 C++ 中前向声明 std::set?

    为了加快编译过程 我正在尝试简化我的头文件MyClass hpp通过前向声明 STL 容器 例如 std vector std set But std set can NOT在以下代码中进行前向声明 同时std vector can be
  • Scala 2.11 LinkedList 已弃用,我应该使用什么?

    根据the docs http www scala lang org api current index html scala collection mutable LinkedList scala collection mutable L
  • 为什么不能在不创建节点作为指针的情况下创建链表?

    里面有一个答案创建链表而不将节点声明为指针 https stackoverflow com questions 40331173 creating a linked list without declaring node as a poin
  • set 中的哈希表在 python 中如何工作?

    据我所知 set在python中通过哈希表来实现O 1 查找复杂度 虽然它是哈希表 但其中的每个条目set必须是可散列的 或不可变的 所以这种和平的代码引发了异常 gt gt gt dict Traceback most recent ca
  • 集合的“toArray”是确定性的吗?

    显然 集合没有任何类型的排序 所以如果我这样做的话 我不能期望任何特定的排序 String string mySet toArray 然而 我面临着一个用例 我不关心字符串数组的顺序 但我确实需要这样的情况 如果两个集合彼此相等 那么 St
  • Java LinkedList ListIterator 行为

    我正在 java util LinkedList 上使用 java util ListIterator 期望它像以下伪代码一样工作 list 1 2 3 4 iterator next should be 1 iterator next s
  • 链表、数组和硬件内存缓存

    虽然之前有人问过关于链表与数组的问题 但答案大多归结为我们大多数人在某些时候可能已经学到的东西 列表擅长插入和删除 数组擅长随机访问 现在 像 Bjarne Stroustrup 这样受人尊敬的人已经argued https www you

随机推荐

  • Python实现自动生成远程桌面RDP登录文件,可在到其他电脑上运行(免输密码)

    Python实现自动生成远程桌面RDP登录文件 xff08 免输密码 xff0c 实时算出密钥 xff0c 解决了密钥只能在本机使用 在其他机使用时还是需要输入密码的问题 xff09 xff0c 并自动登录 xff0c 执行命令 xff08
  • 第二十五课.元学习MetaLearning

    目录 元学习介绍相似度对比的应用 xff1a Few shot Learning问题概述孪生网络SiameseNetworkLearning Pairwise Similarity ScoresTriplet Loss 预训练与微调 参数初
  • C++循环依赖的一些解决方法

    若存在两个类A B使得A类中含有B类的对象且B类中包含A类的对象 xff0c 则称A B之间存在循环依赖 如 class B class A public B b class B public A a 若两个类之间存在循环依赖则在编译时会报
  • Read-only file system怎么解决?

    Read only file system怎么解决 xff1f 我的思路是先查看 proc mounts文件里面的目录的权限 xff0c 确定是否缺少w权限 如果确定缺少的话 xff1a 解决方法 xff1a mount o remount
  • php 上传文件 出现413 Request Entity Too Large问题的解决方法

    配置 xff1a php 43 nginx 需求 xff1a 上传小文件正常 xff0c 上传大于2M 的PDF文件就提示 出现413 Request Entity Too Large问题的解决方法 经过排查 xff0c 这是nginx 拦
  • C语言中,通过指针得到相应数组的长度

    通过指针得到相应数组的长度 xff0c 1 通过指针得到浮点型数组的长度 2 通过指针得到字符串型数组的长度 得到浮点型数组长度 int arrayVlenth float p int len 61 0 while p p 43 43 le
  • Python监控目录文件夹,并使用SFTP上传目录及文件到linux服务器

    Python 扫描监控本地文件夹并进行超大文件上传 方案1 WebUploader大文件分块多线程并发上传 方案2 watchdog目录文件夹监控 paramiko STFP上传服务器 方案3 优化2 压缩后上传 服务器解压 1 监控本地文
  • 本地组策略编辑器关闭windows10的自动更新

    具体操作 xff1a win 43 R输入 gpedit msc 打开组策略 xff0c 在 计算机配置 管理模板 windows组件 Windows更新 里找到 指定Intranet microsoft 更新服务位置 xff0c 双击打开
  • PVE虚拟机篇-PVE虚拟机安装

    安装包下载 前往Proxmox Virtual Environment下载ISO镜像文件 xff0c 可以直接选择最新版本 但是如果没有海外线路一般下载十分缓慢 xff0c 甚至下不动 xff0c 所以可以去中科大镜像源 xff1a 中科大
  • PVE虚拟机篇-pve软件换源

    起因 由于安装pve的第二天突然发现后台显示执行错误 xff0c 更新软件源失败 xff1a 更新软件源方法 注释企业源 echo 34 deb https enterprise proxmox com debian pve bullsey
  • 解决android opengl glReadPixels 慢的问题 二

    解决android opengl glReadPixels 慢的问题 二 上篇讲到使用pbo解决glreadpix慢的问题 xff0c 但是效果不太理想 xff0c 后来参考链接 xff1a OpenGL Pixel Buffer Obje
  • Tesseract 3.02中文字库训练

    下载chi sim traindata字库 下载tesseract ocr setup 3 02 02 exe 下载地址 xff1a http code google com p tesseract ocr downloads list 下
  • Windows下使用pip安装包 出错 TLS/SSL

    Windows下使用pip安装包的时候出现如下问题 xff1a WARNING pip is configured with locations that require TLS SSL however the ssl module in
  • C++进阶(七)-模板与群体数据8

    选择排序 选择排序的基本思想 每次从待排序序列中选择一个关键字最小的元素 xff0c xff08 当需要按关键字升序排列时 xff09 xff0c 顺序排在已排序序列的最后 xff0c 直至全部排完 例9 12 简单选择排序函数模板 tem
  • Ubuntu 20.04 WARNING笔记(长期更新,欢迎交流)

    记录使用Ubuntu 20 04过程的报错 以及解决 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • 循环嵌套例题

    循环嵌套例题 1 例题1 span class token comment 代码 span span class token keyword for span span class token punctuation span span c
  • java实现学生信息管理(对象数组实现)

    java实现学生信息管理 xff08 对象数组实现 xff09 1 例题 实体类 学生类 id 姓名 xff0c 年龄 xff0c 性别 xff0c 成绩 需要使用数组保存学生信息 Student allStu 需要完成的方法 1 根据学生
  • java基础语法思维导图

    java从入门到放弃 简单总结之前的
  • 学生管理系统2.0 (可对学生数组扩容)

    学生管理系统2 0 可对学生数组扩容 1 用户可初始化数组长度 xff0c 不够用时可以扩充数组容量 尝试完成以下功能 实体类 学生类 id 姓名 xff0c 年龄 xff0c 性别 xff0c 成绩 需要使用数组保存学生信息 Studen
  • LinkedList和Set

    LinkedList和Set 1 LinkedList 1 1 LinkedList概述 底层存储数据是一个双向链表结构 自行车链子 就是一个生活中链表结构 xff0c 环环相扣 xff0c 替换 xff0c 拆除非常方便 1 2 Link