java关于ArrayList,Vector,LinkedList,Set及其面试题+LeetCode136两种方式实现

2023-11-15

ArrayList

  • ArrayList的遍历补充

将list转换为数组 使用toArray()方法将列表转换为数组,再对数组进行遍历

@Test
void test01() {
	List<String> names = new ArrayList<>();
	names.add("张三");
	names.add("李四");
	names.add("王五");
	names.add("赵六");
	names.add("钱七");
	
	Object[] array = names.toArray();
	for (Object string : array) {
		System.out.println(string.toString());
	}
}
  • ArrayList的常见方法
@Test
void test02() {
	List<String> names = new ArrayList<>();
	names.add("张三");
	names.add("李四");
	names.add("王五");
	names.add("赵六");
	names.add("钱七");
	
	List<String> names2 = Arrays.asList("刘德华", "张学友", "郭富城", "黎明");
	
	 列表的拼接
	names.addAll(names2);
	System.out.println(names);
	 清空列表
	names.clear();
	
	System.out.println(names.contains("张三"));
	System.out.println(names.contains("法外狂徒"));
	
	 使用匿名内部类实现遍历列表
	names.forEach(new Consumer<String>() {
		@Override
		public void accept(String t) {
			System.out.println(t);
		}
	});
	
}
  • ArrayList值得注意的地方

在jdk8及其以后,如果初始化ArrayList使用的是无参构造,
则默认创建一个{}空数组,长度为0,只有第一次添加元素时,才会进行数组扩容, 默认创建一个大小为10的对象数组。
如果再次扩容,大小为:int newCapacity = oldCapacity + (oldCapacity >> 1);
为原来大写的1.5倍。 如果new ArrayList的时候,使用的有参的构造,则直接创建大小为参数大小的对象数组。

  • 面试题

在java中,存在goto吗?

found: {
            if (o == null) {
                for (; i < size; i++) {
			if (es[i] == null) {
				# break
				break found;
			}
		}
                    
            } else {
                for (; i < size; i++)
                    if (o.equals(es[i]))
                        break found;
            }
            return false;
        }
java使用label技术实现C++中goto语法!!!
  • 注意:如果数据是固定的,建议使用有参的构造函数来创建对应个ArrayList

Vector

中文意思:向量
也是一个动态对象数组,非常像ArrayList,其中的各种方法也和ArrayList类似

和ArrayList不同的地方:
需要注意的是,Vector提供的大多数方法,都是被同步锁修饰的方法,言外之意:Vector是一个线程安全类,主要使用的多线程环境下。
Vector初始化容量也是10,需要注意的是,每次扩容会是原有容量的2倍。ArrayList每次扩容会是原有容量的1.5倍

  • Vector的定义方式:
@Test
void test07() {
	Vector<Integer> nums = new Vector<>();
	nums.add(123);
	nums.add(456);
	nums.add(789);
}

LinkedList

它也是一个非常常用的线性表,需要注意的是:
ArrayList和Vector底层都是动态数组实现的 ,
而LinkedList是基于双向链表的实现。

jdk1.2诞生的有LinkedList和ArrayList,Vector是jdk1.0诞生的。

LinkedList实现了Queue队列,应用方式如代码中的test09,它的底层实际是一个双端队列。
示例:

@Test
void test08() {
	List<String> list = new LinkedList<>();
	list.add("孙悟空");
	list.add("猪八戒");
	list.add("沙僧");
	for (String string : list) {
		System.out.println(string);
	}
}

@Test
void test09() {
	// 队列
	Deque<String> list = new LinkedList<>();
	list.add("孙悟空");
	list.add("猪八戒");
	list.add("沙僧");
	for (String string : list) {
		System.out.println(string);
	}
}

常见面试题:

  1. ArrayList和Vector的区别?
  2. ArrayList、Vector已经LinkedList的区别?
  3. ArrayList和LinkedList区别?

Set接口

因为Set接口代表的集合,因此如下特点:

特点:
1、不能存在重复数据
2、元素没有顺序(因为使用的hash算法实现的)
3、一旦插入成功,顺序也就固定下来

示例:

package com.openlab.day17.List;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.function.Consumer;

import org.junit.jupiter.api.Test;

class TestSet {

	@Test
	void testSet01() {
		Set<Integer> set = new HashSet<>();
//		System.out.println(set.add(12));
//		System.out.println(set.add(12));
		// 如果添加的元素是已经存在,则不会添加
		set.add(12);
		set.add(13);
		set.add(1);
		set.add(122);
		set.add(123);
		set.add(124);
		System.out.println(set);
		
	}
	
	@Test
	void testSet02() {
		HashSet<String> names = new HashSet<>();
		names.add("张三");
		names.add("李四");
		names.add("王五");
		// 因为集合是无序的,因此不存在通过get方法获取元素
	}
	
	@Test
	void testSet03() {
		Set<Integer> set = new HashSet<>();
		set.add(12);
		set.add(13);
		set.add(1);
		set.add(122);
		set.add(123);
		set.add(124);
		
//		for (Integer i : set) {
//			System.out.println(i);
//		}
		
//		Iterator<Integer> it = set.iterator();
//		while (it.hasNext()) {
//			int i = it.next();
//			System.out.println(i);
//		}
		
		set.forEach(new Consumer<Integer>() {
			@Override
			public void accept(Integer t) {
				System.out.println(t);
			}
		});
		
	}
	
	@Test
	void testSet04() {
		Set<Integer> set = new HashSet<>();
		set.add(12);
		set.add(13);
		set.add(1);
		set.add(122);
		set.add(123);
		set.add(124);
		// 只能通过对象本身移除
//		set.remove(o);
		
//		Object[] array = set.toArray();
//		for (Object object : array) {
//			System.out.println(object);
//		}
		
		
	}

}

LeetCode136:
方法一:使用hash列表,循环遍历数组,如果在hash列表中不存在这个元素,就添加,如果不存在就移除。

@Test
int test01() {
	int[] nums={1,1,2};
	Set<Integer> set=new HashSet<>();
	for (int i : nums) {
		if(!set.contains(i)) {
			set.add(i);
		}else {
			set.remove(i);
		}
	}
	Object[] s=set.toArray();
	return (int)s[0];
}

方法二:数组中的全部元素的异或运算结果即为数组中只出现一次的数字。

public int singleNumber(int[] nums) {
     int single = 0;
    for (int num : nums) {
        single ^= num;
    }
    return single;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java关于ArrayList,Vector,LinkedList,Set及其面试题+LeetCode136两种方式实现 的相关文章

  • UnknownHostException:名称或服务未知

    我正在尝试使用 com squareup okhttp 中的 OkHttpClient 从 API 返回一些数据 我遇到了一些错误 我最终能够克服这些错误 但我无法克服这个主机异常错误 并且这里似乎没有任何内容足够具体到我的情况能够解决 下
  • Java中使用正则表达式确定字符串是否为URL [重复]

    这个问题在这里已经有答案了 可能的重复 检查字符串是否为有效 URL 的最佳正则表达式是什么 https stackoverflow com questions 161738 what is the best regular express
  • 行类型 Spark 数据集的编码器

    我想写一个编码器Row https spark apache org docs 2 0 0 api java index html org apache spark sql Row html输入 DataSet 用于我正在执行的地图操作 本
  • MySQL 和 Hibernate 之间的主键自增由谁负责?

    MySQL CREATE TABLE role id role INT 11 unsigned NOT NULL AUTO INCREMENT PRIMARY KEY id role AUTO INCREMENT 1 休眠 Entity p
  • 使用 TLS 证书 JDBC 连接到 Oracle 数据库

    我正在尝试用 Java 编写一个连接类来使用 JDBC 驱动程序连接到 Oracle 数据库 但我想保护用于连接到 Oracle 数据库的参数 例如 jdbcurl 用户名 密码 我必须使用 TLS 证书概念来连接到 Java 中的 Ora
  • “错误:无法找到或加载主类 org.apache.hadoop.util.RunJar”是什么意思?

    我正在尝试运行一个示例 因为它指出 Hadoop 实践 一书 http www manning com lam 第 15 页 这是需要运行的命令 bin hadoop jar hadoop examples jar 但我收到这个错误 Err
  • 在 Java 中对多语言环境字符串进行排序

    我正在尝试按字符串字段 国家 地区 对对象列表进行排序 每个国家 地区都使用其母语 阿根廷 澳大利亚 奥地利 例如 我想要做的是让 出现在 A 国家之后 因为字母 对应于拉丁语 B 我正在尝试使用默认的 Collat er 但非拉丁名称仍然
  • 使用 iText 在内存上生成在磁盘上生成的 PDF

    我正在从 Java 应用程序生成 PDF 并且效果很好 问题是 PDF 在磁盘上生成为 Document documento new Document PageSize A4 25 25 25 25 PdfWriter writer Pdf
  • 为什么 Java 类加载器找不到我的接口?

    在下面的代码中 我使用动态生成一个类sun tools javac Main 我将使用反射创建此类的新实例 问题是 我想避免使用 Reflection 来调用我为此类定义的方法 因此我创建了一个 ProxyInvoker 来引用我在项目中定
  • Java 8 流排序字符串列表[重复]

    这个问题在这里已经有答案了 我正在流上调用排序方法 java 文档说 Sorted 方法返回一个由该流的元素组成的流 并根据自然顺序排序 但是当我运行下面的代码时 List
  • 如何从 Android 应用程序调试共享库 [单独的项目]

    我正在开发一个 Android 应用程序并在项目中使用密集的 C 代码 首先 我将c 源代码放入项目中 并使用以下指南在Android应用程序中具有本机调试的NDK功能 http tools android com recent using
  • 在 Java/Android 中查找 UTF-8 字符串中的字符数

    我试图找出字符串以 UTF 8 存储时的长度 我尝试了以下方法 String str Charset UTF8 CHARSET Charset forName UTF 8 byte abc str getBytes UTF8 CHARSET
  • 如何在使用 Web 服务时获取会话对象?

    如何在使用 Web 服务时获取会话对象 服务在两个程序之间调用 如何在使用 Web 服务时获取用户会话对象 不可能使用请求对象获取会话 因为当我们谈论服务时不会有请求或响应 如果您正在与JAX WS https jax ws dev jav
  • Java - 修剪字节数组中的尾随空格

    我有与此类似的字节数组 77 83 65 80 79 67 32 32 32 32 32 32 32 大致等于 M S A P O C when printed as chars 现在我想修剪尾随空白 使其看起来像 77 83 65 80
  • 无法使用 jolokia 从 Kafka 提取 JMX 数据

    我已经在 centos 7 机器上安装了 Jolokia 并尝试使用 Jolokia 代理提取 Kafka 指标 并使用 Nagios 插件 check jmx4perl 与 Icinga 监控工具集成 以下是我遵循的配置步骤 步骤1 下载
  • 注意通知持续时间

    是否可以将抬头通知的持续时间设置为无限 现在它只显示 5 秒 已经尝试过不同的事情 例如更改类别 但持续时间始终为 5 秒 这是我的代码 Notification notification notificationBuilder setCa
  • Eclipse 包资源管理器缩放?

    我发现将 Eclipse 配置为完全符合您的要求是一项艰巨的工作 因此我不打算自己尝试这样做 我想 缩小 包浏览器侧边栏 你看 我喜欢只在屏幕上显示我的代码 并为项目中的文件显示一小部分 但是 由于这个原因 我永远无法看到当前所在的文件或包
  • 设置滚动条粗细

    有没有办法调整滚动条的粗细JScrollPane 默认值有点笨拙 一个快速但又肮脏的解决方案是将宽度 高度明确设置为例如10 像素通过 jScrollPane getVerticalScrollBar setPreferredSize ne
  • 无法使用 Struts 2 重定向 JSP 文件并显示值

    我创建了一个简单的程序 使用文本字段获取用户的名字和姓氏 但问题是 当我单击提交按钮时 我无法将其重定向到另一个显示用户名字和姓氏的 jsp 文件 这是我的HelloAction class package com novamsc trai
  • 为什么 JDOM 的 getChild() 方法返回 null?

    我正在做一个关于 html 文档操作的项目 我想要现有 html 文档中的正文内容将其修改为新的 html 现在我正在使用 JDOM 我想在我的编码中使用 body 元素 为此 我在编码中使用了 getChild body 但它向我的程序返

随机推荐

  • CSS进阶 —— 10 分钟理解 BFC 原理

    未完待续
  • 幻想乡的日常【树状数组+离线操作】

    题目链接 给出N个点的树 编号为1 N 每次的查询为 L R 想知道编号在 L R 内的所有的结点的会被分成多少个连通块 给出一条性质 连通块数量 点数 边数 点数很方便的可以计算 就是 R L 1 那么 如何计算边数呢 我们知道 每条边有
  • 这届世界杯是不是让你出乎意料?写个足球小游戏来模拟一下!

    前言 今年世界杯有人欢喜有人愁 我想愁的人应该居多 不得不说 小日本是真菜啊 特么的 今天还是搞点咱们好玩点的 世界杯嘛 大家看看就行 大家不是都说 看国足比看相声还搞笑吗 好了 不笑了 今天给大家带来一款非常简单的足球小游戏 希望大家喜欢
  • 什么是分布式软件系统

    什么是分布式软件系统 分布式软件系统是什么意思 分布式软件系统 Distributed Software Systems 是支持分布式处理的软件系统 是在由通信网络互联的多处理机体系结构上执行任务的系统 它包括分布式操作系统 分布式程序设计
  • 精灵标注助手的安装及使用

    位置标注 分割标注 官网下载安装包 http www jinglingbiaozhu com 安装超简单 位置标注 新建 gt 位置标注 gt 选择图片文件夹 定义分类值 用英文逗号隔开 然后 创建 右下角的 可以对图片进行放大 缩小 选择
  • jenkins配置publish over ssh遇到的问题

    一 背景 目标 本篇文章主要是说明自己在配置jenkins的publish over ssh插件所遇到的问题 本次主要是windows下的jenkins通过ssh的方式访问我本地虚拟机的ubuntu系统 准备 1 在jenkins上安装pu
  • [python] Python类型提示指北

    Python3 5 版本引入了类型提示 Type Hints 它允许开发者在代码中显式地声明变量 函数 方法等的类型信息 这种类型声明不会影响 Python 解释器的运行 但可以让 IDE 和静态分析工具更好地理解代码 同时提高代码的可读性
  • MySQL——SQL注入问题

    文章目录 1 SQL注入问题 2 PreparedStatement对象 1 SQL注入问题 SQL存在漏洞 会被攻击导致数据泄露 2 PreparedStatement对象 PreparedStatement 可以防止SQL注入 效率更好
  • vue使用文件流和url下载文件

    改为使用后台返回url下载文件 方法1 这个会导致在点击下载按钮的时候 页面会跳转到奇怪的url window location href row downloadUrl 方法2 点击下载按钮 不会在新窗口打开 const download
  • 刷脸支付算法和硬件不断升级消费更有保障

    刷脸支付设备依靠3D传感摄像头进行人脸识别 其内置的点阵投影仪可以投射出3万多个肉眼不可见的红外点到用户脸部 多维度 多角度在颜色 纹理 深度等数据进行高层次对比 安全性和精准性更高 识别速度更快 尽管现在刷脸支付的安全性已经达到极高的金融
  • 【数据结构与算法】栈的实现(附源码)

    目录 一 栈的概念和结构 二 接口实现 A 初始化 Stackinit 销毁 Stackdestroy 1 Stackinit 2 Stackdestroy B 插入 Stackpush 删除 Stackpop 1 Stackpush 2
  • 接口未正确配置:wx.getLocation(暂无权限)

    原因 腾讯地理位置接口新增与相关流程 地理位置接口新增说明 由于精确地理位置接口只允许部分类目的小程序申请使用 为了满足开发者在更多场景使用地理位置接口 自 2022 年 7 月 14 日起 新增获取模糊地理位置接口 wx getFuzzy
  • 计算机网络第六章——应用层(下)

    等闲变却故人心 却道故人心易变 文章目录 用户代理就是用户和电子邮件系统之间的一个接口 通常都是运行在电脑中的一个程序 用户代理又可以称为电子邮件客户端软件 用户代理可以为用户提供一个比较友好的接口 邮件服务器作为一个服务器就需要长时间的工
  • 责任链模式(Chain of Responsibility) Java实现

    责任链模式 责任链模式 Chain of Responsibility 定义 责任链模式是一种对象的行为模式 在责任链模式里 很多对象由每一个对象对其下家的引用而连接起来形成一条链 请求在这个链上传递 直到链上的某一个对象决定处理此请求 发
  • 以太网(Ethernet)相关基础知识

    最近正好在学习以太网 感觉非常有用 进行一个总结 欢迎指正 如今 以太网已在现实中大量使用 低廉的价格和较快的速度都是它从许多网络中存活下来的因素 学校 公司中大多用得都是以太网 目录 以太网电缆 Ethernet Cabling 曼彻斯特
  • 移动端点击(click)事件延迟问题的解决方法

    移动端 click 事件会有 300ms 的延时 原因是移动端屏幕双击会缩放 double tap to zoom 页面 解决方案 1 禁用缩放 浏览器禁用默认的双击缩放行为并且去掉300ms 的点击延迟 2 利用touch事件自己封装这个
  • (mac)配置vue

    安装参考 https www jianshu com p cc722eba1f46 1 安装brew 一个安装 卸载软件的程序 https blog csdn net poppy rain article details 88406390
  • Java面试题第一季学习笔记

    Java面试题第一季 1 自增变量 2 单例设计 2 1 什么是Singleton 2 2 代码示例 3 类初始化 3 1 代码 3 2 考点 3 3 Override 重写 和Overload 重载 区别 4 方法的传递机制 4 1 代码
  • java 反射中的method.invoke()方法详解

    public class TestReflect public static void main String args String names tom tim allen alice Class
  • java关于ArrayList,Vector,LinkedList,Set及其面试题+LeetCode136两种方式实现

    ArrayList ArrayList的遍历补充 将list转换为数组 使用toArray 方法将列表转换为数组 再对数组进行遍历 Test void test01 List