基于java的集合实现

06_java常见集合类底层实现 List、Set、Map常见集合接口实现类源码学习 阅读详情
  • 集合类:满足三个基本性质:确定性、互异性和无序性。实现代码满足了这三个性质,但数学中的集合还包括:元素可以为任何可以描述的类型,即元素的类型不需要相同,但代码实现中很难满足这个性质。
  • 代码实现
package org.util.ds;

import java.util.Random;

/**
 * 集合类:满足三个基本性质:确定性、互异性和无序性。实现代码满足了这三个性质,但数学中
 * 的集合还包括:元素可以为任何可以描述的类型,即元素的类型不需要相同,但代码实现中很难
 * 满足这个性质。
 * @author Weibing Long
 * @since 2018.04.17
 * @param <Item>
 */
public class Set<Item> {
    private Node root;
    private int n;

    public static void main(String[] args) {
        Set<Integer> set = new Set<Integer>();
        Random random = new Random();
        System.out.println("添加元素");
        for (int i = 0; i < 100; i++) {
            int x = random.nextInt();
            set.add(x);
            System.out.println(x);
            System.out.println(set.contains(x));
        }
        System.out.println(set.contains(12354));
        System.out.println(set.contains(9874));
    }

    public void add(Item item) {
        if (item == null)
            throw new NullPointerException("元素不能为空!");
        if (root == null) {
            root = new Node();
            root.item = item;
            root.next = root;
        } else {
            long countFind = 0;  // 对 root = root.next; 操作进行计数
            // 后面这个可以改进,使不需要下面的操作,留给感兴趣的人做。
            for (int i = 0; i < n; i++) {
                if (root.next.item.equals(item)) {
                    if (i > 0) {  // 保证root引用指向链表的最后一个元素
                        for (int j = 0; j < n - countFind; j++) {
                            root = root.next;
                        }
                    }
                    return;
                } else {
                    root = root.next;
                    countFind++;
                }
            }
            Node preRootNext = root.next;
            root.next = new Node();
            root.next.item = item;
            root.next.next = preRootNext;
            root = root.next;
        }
        n++;
    }

    public void remove(Item item) {
        if (item == null)
            throw new NullPointerException("元素不能为空!");
        Node tempRoot = root;
        for (int i = 0; i < n; i++) {
            if (tempRoot.next.item.equals(item)) {
                tempRoot.next = tempRoot.next.next;
                n--;
            } else {
                tempRoot = tempRoot.next;
            }
        }
    }

    public long size() {
        return n;
    }

    public boolean contains(Item item) {
        if (item == null)
            throw new NullPointerException("元素不能为空!");
        Node tempRoot = root;
        for (int i = 0; i < n; i++) {
            if (tempRoot.next.item.equals(item)) {
                return true;
            } else {
                tempRoot = tempRoot.next;
            }
        }
        return false;
    }

    private class Node {
        private Item item;
        private Node next;
    }
}

集合实现的底层同样和队列一样(使用循环链表)。

循环链表结构如下:
这里写图片描述

82、Java集合操作与实现深入解析 本文深入解析了Java集合框架的核心内容,包括Arrays工具类的常用方法、自定义迭代器的实现方式、如何编写自定义集合类以及对遗留集合类型的分析与使用建议。通过示例代码和详细解释,帮助开发者更好地理解集合操作原理,并提供新旧集合类型的选择指导,适用于集合框架的学习与实际开发中的应用。 阅读详情

相关推荐

HDMI与DisplayPort混搭方案:如何用Xilinx Video PHY Controller实现多协议视频接口转换

本文详细解析了如何利用Xilinx Video PHY Controller IP核实现HDMI与DisplayPort协议转换,涵盖混合视频接口架构设计、GT收发器动态重配置策略及跨协议时钟域处理方案。通过实战案例和配置技巧,帮助开发者构建高性能多协议视频转换系统,适用于医疗影像、工业控制等场景。

weixin_30776273的博客 447

java中集合及其实现类

关于java集合的一些理解。

zjs1201的博客 1656

项目过程记录:ADS-B信号接收并显示(Ubuntu20.04+ANTSDR E310V2)

最近被安排做一个ADS-B信号接收的项目,拿到软件无线电模块(ANTSDR E310V2)后安装环境和软件真的太折磨了。。在此记录以下我走过的弯路,大家可以参考一下。

weixin_43627638的博客 5017

集合各实现类的底层实现原理

ArrayList实现原理要点概括参考文献:http://zhangshixi.iteye.com/blog/674856l ArrayList是List接口的可变数组非同步实现,并允许包括null在内的所有元素。 底层使用数组实现 该集合是可变长度数组,数组扩容时,会将老数组中的元素重新拷贝一份到新的数组中,每次数组容量增长大约是其容量的1.5倍,这种操作的代价很高。 采用了Fail-Fast机制

kris 5万+

运算放大器测试方法-输入失调电压

由于运放输入回路的不对称性,在输入端将产生一定的误差信号,从而限制运放信号灵敏度。通常用输入失调电压(VOS)、输入失调电流(Ios)和输入偏置电流(IB)表示。运放有四个主要特征:输入失调特征、开环特征、共模特征及输出特征。其放大倍数较大,由于外界的影响,即使运放的输入端产生较小的输入信号,经过放大,在输出端也会产生较大的误差。为能精确测量其性能,一般采用辅助运放进行测试。下面着重讲了运放的主要参数及如何精确测量这些参数。文中DUT代表被测运放,A代表辅助运放。

weixin_46135931的博客 1万+

从零搭建Synopsys EDA环境:Ubuntu系统下的完整安装与避坑指南

本文详细介绍了在Ubuntu系统下从零搭建Synopsys EDA环境的完整流程,包括系统配置、安装文件准备、核心工具安装、License配置及常见问题排查。特别针对数字IC设计场景,提供了VCS、Verdi、Design Compiler等EDA Tools的安装避坑指南和性能优化建议,帮助开发者高效搭建稳定的开发环境。

weixin_33738982的博客 491

Java 容器源码分析之Map-Set-List

HashMap 的实现原理 HashMap 概述 HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 Hash...

aikuangchou2298的博客 530

cartographer从入门到精通(一):cartographer介绍

Cartographer的架构图我们可以看到白色框出来的三个区域,分别是Input Sensor Data(数据输入模块)Local SLAM(局部SLAM模块)Global SLAM (background thread)(全局SLAM模块)下面我们分别介绍一下这几个模块。

weixin_68094467的博客 1053

java集合底层实现

Set和Map的关系 Set代表无序,不能重复的集合;Map代表Key-Value组成的集合,是一种关联数组。Map的Key要求是不能重复,没有顺序。把Map的所有Key组合起来就是Set。 Set<K> keySet(); HashMap和HashSet原理 HashMap底层是用数组链表存储的,元素是Entry。 向HashMap添加<Key,Value>时,...

weixin_33794672的博客 345

RT-DETR改进策略【RT-DETR和Mamba】| 替换骨干 Mamba-RT-DETR-T !!! 最新的发文热点

模块是模型中的一个重要组成部分,其主要作用是在模型的初始阶段对输入图像进行处理,方便后续的特征提取和目标检测。以下是对。

Limiiiing的博客 1322

对halcon形状匹配算法的一点分析

基于Intel VTune Profiler对halcon形状匹配算法的一点分析

manuoo的专栏 567

Java之集合的实现细节(一)

Set和Map 通过继承关系体系,我们可以得出 SetMap EnumSetEnumMap SortedSetSortedMap TreeSetTreeMap NavigableSetNavigableMap HashSetHashMap LinkedHashSetLinkeHashMap 表面上这两种集合没有太大关系,但是如果只考虑Map集合

伪文艺编程妞 826

复数值神经网络可能是深度学习的未来

复数这种东西,在人的头脑中似乎抽象、似乎复杂,然而,对于计算机来说,一点也不抽象,不复杂,那么,将复数概念推广到神经网络会是什么结果呢?本篇介绍国外的一些同行的尝试实践,请我们注意观察他们的进展。

gongdiwudu的专栏 6615

Java 集合实现类

Java 的集合实现类

qq_49288154的博客 1476

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java 集合实现_Java集合实现

set:public class BSTSet> implements Set {private BST bst;public BSTSet(){bst=new BST<>();}@Overridepublic int getSize(){return bst.size();}@Overridepublic boolean isEmpty(){return bst.isEmpty...

weixin_28715953的博客 206

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java实现集合运算_java实现集合的运算

package 期末算法设计;import java.util.HashMap;import java.util.HashSet;import java.util.Scanner;import java.util.TreeSet;public class SetOperation {HashMap allSet = new HashMap<>();Scanner read =new S...

weixin_33445134的博客 1241

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java集合底层实现原理

目录 一:Iterable接口 二.Collection接口 三:List接口 3.1 ArrayList类 3.1.1 介绍 3.1.2底层 3.1.2 线程安全问题 3.2 Vector类 3.2.1 底层实现 3.2.2扩容 3.2.3 线程安全性 3.2.4 vector与ArrayList比较 3.3 LinkedList 3.3.1 底层实现 3.3.2 容量问题 3.3.3 使用问题 3.3.4 线程安全性 4. Set接口 4.1 HashSet 4.

数据挖掘+大数据研发+算法学习 1269

JAVA基于数组实现集合和基于链表实现集合

1.定义一个接口MyList public interface MyList { //增 void add(int num); //删 boolean delete(int index2); //改 boolean update(int index2, int num); //获得值 int get(int index2); //获得长度 int getLen(); } ...

black_CC的博客 1593

java中各个集合的实现原理

java中各个集合的实现原理

weixin_41126842的博客 361

JAVA实现集合划分问题

/*集合划分问题:  * n个元素的集合{1,2,.,n }可以划分为若干个非空子集。例如,当n=4 时,集合{1,2,3,4}可以划分为15个不同的非空子集如下:  {1},{2},{3},{4}}, {{1,2},{3},{4}},  {{1,3},{2},{4}}, {{1,4},{2},{3}},  {{2,3},{1},{4}}, {{2,4},{1},{3}},  {{3,4

老王 2209

Java 集合--快速掌握涵盖三大场景实现的Set集合底层原理

定义继承自,用于存储无重复元素的集合。核心特性:元素唯一性。常见操作add(E e)addAllremoveAllretainAll遍历:增强 for、迭代器这三者同属Set家族,共享“无重复元素”、高效去重的核心特性,又各司其职、在“顺序”与“性能”上做出不同取舍。Set集合底层通过委派成员变量Map集合完成具体实现,但特性稍有差异,使用时需要注意。如果没有掌握Map集合的,建议先把Map集合的HashMap和TreeMap。

持 开源思想,撰 必胜所学,望 勤学者,无难处 965

java集合的实现_常见Java集合的实现细节

1. Set和MapSet代表一种集合元素无序、集合元素不可重复的集合,Map则代表一种由多个key-value对组成的集合,Map集合类似于传统的关联数组。表面上看它们之间相似性很少,但实际上Map和Set之间有莫大的关联。1.1 Set和Map的关系在看Set和Map之间的关系之前,先来看看Set集合的继承体系。再看Map集合的类继承关系:仔细观察图3.2中的Map集合的继承体系里被灰色覆盖的...

weixin_34404528的博客 258

【Java集合的使用以及部分底层实现】

无论前方等待我们的是什么,让我们保持勇气和决心,一路向前!

weixin_63309304的博客 1092

java数组实现的集合_JAVA基于数组实现集合和基于链表实现集合

1.定义一个接口MyListpublic interface MyList {//增void add(int num);//删boolean delete(int index2);//改boolean update(int index2, int num);//获得值int get(int index2);//获得长度int getLen();}2.写一个类实现MyList接口,基于数组实现集合。...

weixin_39627144的博客 255

用集合编写的java通讯录,java使用集合实现通讯录功能,java集合实现通讯录

java使用集合实现通讯录功能,java集合实现通讯录本文实例为大家分享了java使用集合实现通讯录的具体代码,供大家参考,具体内容如下代码有些繁琐,只适合初学者。项目1java通讯录方法(声明方法的类)代码块代码块语法遵循标准markdown代码,例如:package com.lanou.homwork;import java.util.Collection;import java.util.H...

weixin_39907131的博客 570

java8 实现两个集合之间进行元素比较

首先我们有两个集合A,B,我们以其中一个集合A为基准 想获得B集合中的元素,相对于A集合来说,哪些元素不存在,哪些元素A没有 业务场景:以db1中的数据为准,更新db2中的数据,db1有的,db2没有的进行添加操作,db2有的,db1没有的进行删除操作 那么我们就需要知道,哪些元素是要添加的,哪些是要删除的 传统做法:通过标记实现 private static Map<...

MyBoBo 1万+
上一篇: 基于java的队列实现
下一篇: Latex中编辑公式的helloworld代码
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值