Java中数组容器(ArrayList)设的计与实现
目录
- ArrayList为我们提供了哪些功能
- 设计原理分析
- 代码实现
- 完整代码
本篇文章主要跟大家介绍我们最常使用的一种容器ArrayList
、Vector
的原理,并且自己使用Java
实现自己的数组容器MyArrayList
,让自己写的容器能像ArrayList
那样工作。在本篇文章当中首先介绍ArrayList
的一些基本功能,然后去分析我们自己的容器MyArrayList
应该如何进行设计,同时分析我们自己的具体实现方法,最后进行代码介绍!!!
ArrayList为我们提供了哪些功能
我们来看一个简单的代码,随机生成100个随机数,查看生成随机数当中是否存在50这个数。
public class MyArrayList { public static void main(String[] args) { Random random = new Random(); ArrayList<Integer> list = new ArrayList<>(); for (int i = 0; i < 100; i++) { list.add(random.nextInt(5000)); } for (int i = 0; i < 100; i++) { if (list.get(i) == 50) { System.out.println("包含数据 50"); } } list.set(5, 1000);// 设置下标为5的数据为100 list.remove(5);// 删除下标为5的数据 list.remove(new Integer(888));// 删除容器当中的第一个值为5的数据 } }
上述代码包含了ArrayList
最基本的一个功能,一个是add
方法,向数组容器当中加入数据,另外一个方法是get
从容器当中拿出数据,set
方法改变容器里的数据,remove
方法删除容器当中的数据。ArrayList
的很多其他的方法都是围绕这四个最基本的方法展开的,因此我们在这里不仔细介绍其他的方法了,后面我们自己实现的时候遇到问题的时候自然会需要设计相应的方法,然后我们进行解决即可。
现在我们就需要去设计一个数组容器实现“增删改查”这四个基本功能。
设计原理分析
首先明白一点我们需要使用什么工具去实现这样一个容器。我们手里有的工具就是Java
提供给我们的最基本的功能——数组(这个好像是废话,我们的标题就是数组容器
相关推荐
-
Java中ArrayList的使用详细介绍
目录 1.ArrayList类 1.1ArrayList类概述 1.2ArrayList类常用方法 1.2.1构造方法 1.2.2成员方法 1.2.3示例代码 1.3ArrayList存储字符串并遍历 1.3.1案例需求 1.3.2代码实现 1.4ArrayList存储学生对象并遍历 1.4.1案例需求 1.4.2代码实现 1.5ArrayList存储学生对象并遍历升级版 1.5.1案例需求 1.5.2代码实现 总结 1.ArrayList类 1.1ArrayList类概述 在java中,我们会
-
Java中HashMap如何解决哈希冲突
目录 1. Hash算法和Hash表 2. Hash冲突 3. 解决Hash冲突的方法有四种 4.HashMap在JDK1.8版本的优化 1. Hash算法和Hash表 了解Hash冲突首先了解Hash算法和Hash表 Hash算法就是把任意长度的输入通过散列算法变成固定长度的输出,这个输出结果就是一个散列值 Hash表又叫做“散列表”,它是通过key直接访问到内存存储位置的数据结构,在具体的实现上,我们通过Hash函数,把key映射到表中的某个位置,来获取这个位置的数据,从而加快数据的查找 2
-
Java实现双端链表LinkedList
目录 一.LinkedList 介绍 二.LinkedList 使用 一.LinkedList 介绍 1️⃣LinkedList 是 Java 集合框架中一个重要的实现,其底层采用的双向链表结构,没有初始化大小,就是一直在前面或者后面新增就好.由于基于链表实现,存储元素过程中,无需像ArrayList那样进行扩容.2️⃣LinkedList 存储元素的节点需要额外的空间存储前驱和后继的引用.3️⃣LinkedList 在链表头部和尾部插入效率比较高,但在指定位置进行插入时,效率一般.原因是,在指
-
Java实现HashMap排序方法的示例详解
目录 简介 排序已有数据 按key排序 按value排序 按插入顺序存放 HashMap不按插入顺序存放 LinkedHashMap会按照插入顺序存放 简介 本文用示例介绍HashMap排序的方法. 排序已有数据 按key排序 使用stream进行排序(按key升序/降序) package org.example.a; import java.util.*; public class Demo { public static void main(String[] args) { Map<Stri
-
Java中ArrayList和LinkedList区别
目录 1 前言 2 数据结构的区别 2.1 ArrayList 2.2 LinkedList 2.3 使用场景 3 源码分析 3.1 ArrayList核心源码 3.2 LinkedList核心源码 4 码农来洞见 4.1为什么ArrayList比LinkedList要快 4.2 注意ArrayList不同JDK版本源码 4.3 高并发下如何保证集合数据的同步 4.4 为什么Java的Vector类被认为是过时的或者废弃的 1 前言 许多语言,例如 Perl ,Python 和 Ruby ,都有
-
Java ArrayList与LinkedList及HashMap容器的用法区别
目录 前言 一.ArrayList 1.原理 2.用法 二.LinkedList 1.原理 2.用法 三.HashMap 1.原理 2.用法 四.对比优缺点及区别 前言 Java中容器对象主要用来存储其他对象,根据实现原理不同,主要有3类常用的容器对象: 1.ArrayList 使用数组结构存储容器中的元素 2.LinkedList 使用链表结构存储容器中的元素 3.HashMap 使用Hash原理,同时使用数组和链表结构 一.ArrayList 1.原理 2.用法 打开Idea新建项目,右击s
-
以武侠形式理解Java LinkedList源码
目录 一.LinkedList 的剖白 二.LinkedList 的内功心法 三.LinkedList 的招式 1)招式一:增 2)招式二:删 3)招式三:改 4)招式四:查 四.LinkedList 的挑战 一.LinkedList 的剖白 大家好,我是 LinkedList,和 ArrayList 是同门师兄弟,但我俩练的内功却完全不同.师兄练的是动态数组,我练的是链表. 问大家一个问题,知道我为什么要练链表这门内功吗? 举个例子来讲吧,假如你们手头要管理一推票据,可能有一张,也可能有一亿张
-
Java超详细讲解ArrayList与顺序表的用法
目录 简要介绍 Arraylist容器类的使用 Arraylist容器类的构造 ArrayList的常见方法 ArrayList的遍历 ArrayList中的扩容机制 简要介绍 顺序表是一段物理地址连续的储存空间,一般情况下用数组储存,并在数组上完成增删查改.而在java中我们有ArrayList这个容器类封装了顺序表的方法. 在集合框架中,ArrayList是一个普通的类,其实现了list接口.其源码类定义如图 可见,其实现了RandomAccess, Cloneable, 以及Seriali
-
Java详细分析讲解HashMap
目录 1.HashMap数据结构 2.HashMap特点 3.HashMap中put方法流程 java集合容器类分为Collection和Map两大类,Collection类的子接口有Set.List.Queue,Map类子接口有SortedMap.如ArrayList.HashMap的继承实现关系分别如下 1.HashMap数据结构 在jdk1.8中,底层数据结构是“数组+链表+红黑树”.HashMap其实底层实现还是数组,只是数组的每一项都是一条链,如下 当链表过长时,会严重影响HashMa
-
Java中数组容器(ArrayList)设的计与实现
目录 ArrayList为我们提供了哪些功能 设计原理分析 代码实现 完整代码 本篇文章主要跟大家介绍我们最常使用的一种容器ArrayList.Vector的原理,并且自己使用Java实现自己的数组容器MyArrayList,让自己写的容器能像ArrayList那样工作.在本篇文章当中首先介绍ArrayList的一些基本功能,然后去分析我们自己的容器MyArrayList应该如何进行设计,同时分析我们自己的具体实现方法,最后进行代码介绍!!! ArrayList为我们提供了哪些功能 我们来看一个
-
Java使用数组实现ArrayList的动态扩容的方法
提到数组大家肯定不会陌生,但我们也知道数组有个缺点就是在创建时就确定了长度,之后就不能更改长度.所以Java官方向我们提供了ArrayList这个可变长的容器.其实ArrayList底层也是用数组进行实现的,今天我们就自己使用数组实现ArrayList的功能. 一.整体框架 废话不多说,我们以存放int类型元素为例,看一下ArrayList需要的成员变量和需要实现的方法. public class ArrayList private int size;//用来记录实际存储元素个数 private
-
JavaScript实现Java中Map容器的方法
本文实例讲述了JavaScript实现Java中Map容器的方法.分享给大家供大家参考,具体如下: 声明一下,JavaScript和Java的区别就像雷锋和雷峰塔的区别. 在Java中,Map是一种集合,用来存储Key-Value键值对的容器.根据键得到值,因此不允许键重复(重复了的覆盖),但允许值重复.JavaScript中的对象特性,就是不允许有相同的属性存在,和Java的Map非常的相似,所以可以利用这个特性在JavaScript中来实现Map容器,实现基本的增删查的操作. functio
-
详解Java中数组判断元素存在几种方式比较
1. 通过将数组转换成List,然后使用List中的contains进行判断其是否存在 public static boolean useList(String[] arr,String containValue){ return Arrays.asList(arr).contains(containValue); } 需要注意的是Arrays.asList这个方法中转换的List并不是java.util.ArrayList而是java.util.Arrays.ArrayList,其中java.
-
Java中数组与集合的相互转换实现解析
这篇文章主要介绍了Java中数组与集合的相互转换实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 List转数组:采用集合的toArray()方法 数组转List:采用Arrays的asList()方法 数组转换为集合 注意:在数组转集合的过程中,要注意是否使用了视图的方式直接返回数组中的数据.以Arrays.asList()为例,它把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出 Unsu
-
Java中数组转List的三种方法与对比分析
前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一.最常见方式(未必最佳) 通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常. 关键代码:List list = Arrays.asList(strArray); private void testArrayCastToListError() { String[] strArray = new Stri
-
Java中数组的使用与注意事项详解(推荐)
目录 一.初始数组 二.数组的创建 三.使用数组时的注意事项 (1)初始化问题 (2)数组长度的使用 (3)有关数组长度的问题 (4)对于数组的访问 (5)数组的遍历 三.数组的类型 1.每个部分数据区的概念: 2.数组在JVM当中的使用情况 3.引用类型的注意事项 四.关于引用类型的返回值 总结 一.初始数组 数组的概念:数组就是一个用来存储相同类型数据的一个容器. 为什么要使用数组? 当我们要存储大量相同类型的时候,通过配合循环来使用就会大量减少代码复杂程度 数组的特点: (1)数组是一种引
-
java中数组的相关知识小结(推荐)
1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[]ags; ags=new int{1,2,3,4}; 或者 int[]ags=new int{1,2,3,4}; 3.java不支持不同类型的重名数组 4.java中数组的循环赋值 package dierge; public class Shuzu { public static void main
-
Java中数组的创建与传参方法(学习小结)
(一)数组的创建 数组的创建包括两部分:数组的申明与分配内存空间. int score[]=null; //申明一维数组 score=new int[3]; //分配长度为3的空间 数组的申明还有另外一种方式: int[] score=null; //把中括号写在数组名前面 通常,在写代码时,为了方便,我们将两行合并为一行: int score[]=new int score[3]; //将数组申明与分配内存写在一行 (二)传递参数 由于初学java,这里只讨论值传递,不考虑地址传递.主要有3点
-
C#中数组、ArrayList和List三者的区别详解
在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. //数组 string[] s=new string[2]; //赋值 s[0]="a"; s[1]="b"; //修改 s[1]="a1"; 但是数组存在一些不足的地方.在数组的两个数据间插入数据是很麻烦的,而且在声明数组的时候必须指定数组的长度
随机推荐
- angular使用post、get向后台传参的问题实例
- jsp页面中表达式语言中的$符号不起作用的解决方法
- 详解vue-validator(vue验证器)
- 玩转Win XP系统内置语音输入软件
- Java实现邮件发送遇到的问题
- 用srcElement实现添加效果 原创
- "PageMethods未定义"或"对象不支持此属性或方法"解决方法分享
- 字母顺序颠倒而单词顺序不变的php代码
- Python实现提取谷歌音乐搜索结果的方法
- ASP高级技巧精选集
- php之Memcache学习笔记
- 标准版Eclipse搭建PHP环境的详细步骤
- JSP中实现判断客户端手机类型并跳转到app下载页面
- 服务器攻防站 网站后门防范及安全配置
- jquery简单的拖动效果实现原理及示例
- Bootstrap栅格系统的使用详解
- RHEL 5.2下vsftp配置全教程分享第1/2页
- C++ 自定义控件的移植问题
- spring基础系列之JavaConfig配置详解
- 统计有多少行JS代码和ASP代码