Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。主要有HashSet和TreeSet两大实现类。

Set:

  在判断重复元素的时候,Set集合会调用hashCode()和equal()方法来实现。
  HashSet是哈希表结构,主要利用HashMap的key来存储元素,计算插入元素的hashCode来获取元素在集合中的位置;
  TreeSet是红黑树结构,每一个元素都是树中的一个节点,插入的元素都会进行排序;

详细的介绍点击这里

下面展示部分代码:

private E arrElementE[];
private int size; @SuppressWarnings("unchecked")
public ArrImplSet() {
arrElementE = (E[]) new Object[0];
} public ArrImplSet(E [] arr) {
arrElementE = arr;
size = arrElementE.length;
}
/**
* 添加元素
* @param element
*/
public void addElement(E element) {
// 判断元素是否存在
if (!contains(element)) {
// 数组是否满了,需要扩容
if (size == arrElementE.length) {
incrementArray();
}
arrElementE[size ++] = element;
}
}
/**
* 返回 集合长度
* @return
*/
public int size() {
if (arrElementE != null) {
return arrElementE.length;
}else {
return 0;
}
}
/**
* 清空集合
*/
public void clear() {
arrElementE = null;
} public String toString() {
if(arrElementE == null || arrElementE.length == 0) {
return "empty";
}else {
StringBuilder str = new StringBuilder("[");
for (int i = 0; i < arrElementE.length; i++) {
str.append(arrElementE[i]+ ",");
}
str.append("]");
return str.toString();
}
} /**
* 数组扩容
*/
@SuppressWarnings("unchecked")
private void incrementArray() {
E [] tempArrEs = arrElementE;
arrElementE = (E[]) new Object[size + 10 ];
System.arraycopy(tempArrEs, 0, arrElementE, 0, size);
} /**
* 判断元素是否存在,注意。Set 是可以保存null。
* @param el
* @return
*/
public boolean contains(E el) {
if (null == el) {
// 是否已存在null
for (int i = 0; i < size; i++)
if (arrElementE[i] == null)
return true;
}else {
for (int i = 0; i < size; i++)
if (arrElementE[i] == el)
return true;
}
// 都不存在,返回false
return false;
}
/**
* 返回
* @param index
* @return
*/
public E get(int index) {
if(size <= index) {
throw new IndexOutOfBoundsException("下标越界了,index:"+index);
}
return arrElementE[index];
} public static void main(String[] args) {
// ArrImplSet<String> set = new ArrImplSet<String>();
// set.addElement("abcdefg");
// set.addElement("abcdefg");
// set.addElement("abc5efg");
// set.addElement("null");
// System.out.println(set.toString()); ArrImplSet<Integer> set = new ArrImplSet<Integer>();
set.addElement(1);
set.addElement(2);
set.addElement(1);
set.addElement(null);
// System.out.println(set.toString());
for (int i = 0; i < set.size; i++) {
System.out.println(set.get(i));
} }

自己动手系列----使用数组实现一个简单的Set的更多相关文章

  1. 自己动手系列----使用数组实现一个简单的Map

    数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同.Java 语言中提供的数组是用来存储固定大小的同类型元素. 这里提一下,数组的优缺点: 优点: 1. 使用索 ...

  2. 动手造轮子:实现一个简单的 EventBus

    动手造轮子:实现一个简单的 EventBus Intro EventBus 是一种事件发布订阅模式,通过 EventBus 我们可以很方便的实现解耦,将事件的发起和事件的处理的很好的分隔开来,很好的实 ...

  3. 动手造轮子:实现一个简单的 AOP 框架

    动手造轮子:实现一个简单的 AOP 框架 Intro 最近实现了一个 AOP 框架 -- FluentAspects,API 基本稳定了,写篇文章分享一下这个 AOP 框架的设计. 整体设计 概览 I ...

  4. BAT面试题:使用数组实现一个简单的阻塞队列

    这道题是我亲身经历的一道大厂面试题,非常值得分享! 这道题可以分为两个步骤进行编码解答,第一步是基于数组实现一个队列,第二步是实现线程阻塞. 如果是基于数组实现栈的数据结构,那么我们只需要一个指针进行 ...

  5. Tomcat详解系列(1) - 如何设计一个简单的web容器

    Tomcat - 如何设计一个简单的web容器 在学习Tomcat前,很多人先入为主的对它的认知是巨复杂的:所以第一步,在学习它之前,要打破这种观念,我们通过学习如何设计一个最基本的web容器来看它需 ...

  6. 【 D3.js 入门系列 --- 3 】 做一个简单的图表!

    前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为 ...

  7. JBoss 系列七十:一个简单的 CDI Web 应用

    概述 本文通过一个简单的 CDI Web 应用演示dependency injection, scope, qualifiers 以及EL整合.应用部署完成后我们可以通过http://localhos ...

  8. 【 D3.js 入门系列 — 3 】 做一个简单的图表!

    图1. 柱形图 1. 柱形图 前几章的例子,都是对文字进行处理.本章中将用 D3 做一个简单的柱形图.制作柱形图有很多种方法,比如用 HTML 的 <div> 标签,或在 SVG 上绘制 ...

  9. python爬虫系列(1)——一个简单的爬虫实例

    本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片. 1. 概述 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片.下载图片的步骤如下: 获取网页html文本内容:分析html中 ...

随机推荐

  1. 关键字Lock的简单小例子

    一.什么是Lock? Lock——字面上理解就是锁上:锁住:把……锁起来的意思: 为什么要锁?要锁干什么?——回到现实中可想象到,这个卫生间我要上,其他人不要进来!(所以我要锁住门):又或者土味情话所 ...

  2. Vue中在template标签中进行判断时注意比较元素

    (一)比较的元素,一个是data元素,另外一个是常量,如下图所示: 编译正常,运行正常,效果在期望中,会显示Hello World,结果如下: (二)比较的元素,一个是data元素,另外一个是cons ...

  3. VSCode常用插件之vscode-stylelint使用

    更多VSCode插件使用请访问:VSCode常用插件汇总 vscode-stylelint这是一个检验CSS/SASS/LESS代码规范的插件. StyleLint 使用指南 vscode-style ...

  4. kaggle之猫狗数据集下载

    链接:https://pan.baidu.com/s/1l1AnBgkAAEhh0vI5_loWKw 提取码:2xq4 百度网盘实在是恶心,找的别人的网盘下载不仅速度慢,还老挂掉,自己去kaggle下 ...

  5. CodingPlus Blog Update Info

    CodingPlus更新啦! 我就是记录一下!您想知道现在的博客是第几代的吗?您想知道CodingPlus博客的发展历程吗?来,让我们一起看看! V3.5 最新版了! V3.5.0 很多人看到自然觉得 ...

  6. 抛弃VMware吧,使用Win10自带的Hyper-V创建虚拟机

    个人博客 地址:https://www.wenhaofan.com/article/20190619221449 介绍 Hyper-V是微软提出的一种系统管理程序虚拟化技术,能够实现桌面虚拟化. 启动 ...

  7. PS_0002:改变曲线,改变色阶

    1,ctrl + m  改变曲线 2,ctrl + l  改变色阶

  8. 02-React基础语法(2)

    一.条件渲染 语法:使用原生 js 的 if 或者 三元表达式 判断   例子:判断用户是否登录,提示:已登录.未登录 (User组件) <script type="text/babe ...

  9. 优先级队列-堆-STL实现

    #include <cstdio> #include <iostream> #include <queue> using namespace std; // 默认是 ...

  10. 【UWP】在 UWP 中使用 Exceptionless 进行遥测

    2020年1月17日更新: nightly build 版本已发布 https://www.myget.org/feed/exceptionless/package/nuget/Exceptionle ...