java链表集合_Java底层基于链表实现集合和映射--集合Set操作详解
本文实例讲述了Java底层基于链表实现集合和映射--集合Set操作。分享给大家供大家参考,具体如下:
在Java底层基于二叉搜索树实现集合和映射中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的.
1、集合set相关功能
1.1 add()的不同
用于链表本身没有去重的效果,因此我们在做基于链表的集合时,需要对add()方法做一下特殊处理,如下增加一个判断即可。
@Override
public void add(E e) {
if (!list.contains(e)) {
list.addFirst(e);
}
}
2.集合实现
2.1 Set接口定义
/**
* 集合的接口
*/
public interface Set {
void add(E e);//添加
void remove(E e);//移除
int getSize();//获取大小
boolean isEmpty();//是否为空
boolean contains(E e);//是否包含元素
}
3.2 基于链表实现集合Set
public class LinkedListSet implements Set {
private LinkedList list;
public LinkedListSet() {
list = new LinkedList();
}
@Override
public int getSize() {
return list.getSize();
}
@Override
public boolean isEmpty() {
return list.isEmpty();
}
@Override
public boolean contains(E e) {
return list.contains(e);
}
@Override
public void add(E e) {
if (!list.contains(e)) {
list.addFirst(e);
}
}
@Override
public void remove(E e) {
list.removeElement(e);
}
}
3.3测试:两本名著的词汇量 和不重复的词汇量
import java.util.ArrayList;
public class LinkedListSetTestDemo {
public static void main(String[] args) {
System.out.println("Pride and Prejudice");
//新建一个ArrayList存放单词
ArrayList words1 = new ArrayList<>();
//通过这个方法将书中所以单词存入word1中
FileOperation.readFile("pride-and-prejudice.txt", words1);
System.out.println("Total words : " + words1.size());
LinkedListSet set1 = new LinkedListSet<>();
//增强for循环,定一个字符串word去遍历words
//底层的话会把ArrayList words1中的值一个一个的赋值给word
for (String word : words1)
set1.add(word);//不添加重复元素
System.out.println("Total different words : " + set1.getSize());
System.out.println("-------------------");
System.out.println("Pride and Prejudice");
//新建一个ArrayList存放单词
ArrayList words2 = new ArrayList<>();
//通过这个方法将书中所以单词存入word1中
FileOperation.readFile("a-tale-of-two-cities.txt", words2);
System.out.println("Total words : " + words2.size());
LinkedListSet set2 = new LinkedListSet<>();
//增强for循环,定一个字符串word去遍历words
//底层的话会把ArrayList words1中的值一个一个的赋值给word
for (String word : words2)
set2.add(word);//不添加重复元素
System.out.println("Total different words : " + set2.getSize());
}
}
结果:
这里需要说明一下就是关于我们统计的单词数只考虑了每个单词组成的不用,并没有对单词的特殊形式做区分。
希望本文所述对大家java程序设计有所帮助。
java链表集合_Java底层基于链表实现集合和映射--集合Set操作详解相关推荐
- java web试题_Java web开发经典面试题汇总(内附答案详解)
原标题:Java web开发经典面试题汇总(内附答案详解) 1.说出Servlet 的生命周期,并说出Servlet 和CGI 的区别? 答:Web 容器加载Servlet 并将其实例化后,Servl ...
- java 数组 包含_Java中高效的判断数组中某个元素是否存在详解
一.检查数组是否包含某个值的方法 使用List public static boolean useList(String[] arr, String targetValue) { return Arr ...
- java迭代器删除元素_java迭代器中删除元素的实例操作详解
java迭代器中删除元素的实例操作详解 2021-01-21 16:40:08 我们知道通过Iterator,可以对集合中的元素进行遍历.那么在其中遇到我们不需要的元素时,可不可以在遍历的时候顺便给删 ...
- java switch 值_Java switch多值匹配操作详解
这篇文章主要介绍了Java switch多值匹配操作详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们都知道 switch 用来走流程分支,大 ...
- java对文件的操作详解_Java 对 Properties 文件的操作详解及简单实例
Java 对 Properties 文件的操作详解及简单实例 发布于 2020-8-7| 复制链接 摘记: Java 对 Properties 文件的操作简介在 Java 中,我们常用 java.ut ...
- java中的getnumber怎么用_java安全编码指南之:Number操作详解
简介 java中可以被称为Number的有byte,short,int,long,float,double和char,我们在使用这些Nubmer的过程中,需要注意些什么内容呢?一起来看看吧. Numb ...
- java case 多个值_Java switch多值匹配操作详解
这篇文章主要介绍了Java switch多值匹配操作详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们都知道 switch 用来走流程分支,大 ...
- Java多线程系列(九):CountDownLatch、Semaphore等4大并发工具类详解
之前谈过高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 ,以及高并发编程系列:ConcurrentHashMap的实现原理(JDK1.7和JDK1.8) 今天主要介绍concurre ...
- 基于百度地图实现Android定位功能实现(详解+教程)
基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...
最新文章
- 可恶的MSSQL 内部 SQL Server 错误。(臭BUG)
- mysql dml_详解MySQL---DDL语句、DML语句与DCL语句
- UA MATH566 统计理论 Cramer-Rao不等式与Delta方法的联系
- dotnet core 应用是如何跑起来的 通过自己写一个 dotnet host 理解运行过程
- 《C++ Primer》7.3.4节练习
- vm虚拟机安装_虚拟机 --- 安装VM(一)
- 【数据库】mysql常用的数据类型
- LeetCode 93. 复原IP地址
- fastjson转json字符串按字母大小排序
- 腾讯云联合信通院等发布标准物模型平台,构建物联网行业通用标准
- 基于MATLAB绘制双纵坐标轴图
- 通过mysql修改后台密码_怎么通过修改数据库修改网站后台的管理员密码?
- Atom | 用最酷的编辑器 写最美的代码
- 软件工程师待遇怎么样?软件工程师薪水到底有多高?
- Chapter 8 Part-of-Speech Tagging
- python 入门篇 之 正则表达式re.findall的使用
- 【小程序】微信小程序自定义导航栏及其封装
- HTML技能点--设置网页图标标志
- dreamweaver快捷键大全
- itext实现pdf内容替换