Java底层基于链表如何实现集合和映射
导读:本文共2201.5字符,通常情况下阅读需要7分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 在Java底层基于二叉搜索树实现集合和映射中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的.1、集合set相关功能1.1 add()的不同用于链表本身没有去重的效果,因此我们在做基于链表的集合时,需要对add()方法做一下特殊处理,如下增加一个判断即可。@Overridepublicvoidadd(Ee... ...
目录
(为您整理了一些要点),点击可以直达。在Java底层基于二叉搜索树实现集合和映射中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的.
1、集合set相关功能
1.1 add()的不同
用于链表本身没有去重的效果,因此我们在做基于链表的集合时,需要对add()
方法做一下特殊处理,如下增加一个判断即可。
@Overridepublicvoidadd(Ee){if(!list.contains(e)){list.addFirst(e);}}
2.集合实现
2.1 Set接口定义
/***集合的接口*/publicinterfaceSet<E>{voidadd(Ee);//添加<——<不能添加重复元素voidremove(Ee);//移除intgetSize();//获取大小booleanisEmpty();//是否为空booleancontains(Ee);//是否包含元素}
3.2 基于链表实现集合Set
publicclassLinkedListSet<E>implementsSet<E>{privateLinkedList<E>list;publicLinkedListSet(){list=newLinkedList<E>();}@OverridepublicintgetSize(){returnlist.getSize();}@OverridepublicbooleanisEmpty(){returnlist.isEmpty();}@Overridepublicbooleancontains(Ee){returnlist.contains(e);}@Overridepublicvoidadd(Ee){if(!list.contains(e)){list.addFirst(e);}}@Overridepublicvoidremove(Ee){list.removeElement(e);}}
3.3测试:两本名著的词汇量 和不重复的词汇量
importjava.util.ArrayList;publicclassLinkedListSetTestDemo{publicstaticvoidmain(String[]args){System.out.println("PrideandPrejudice");//新建一个ArrayList存放单词ArrayList<String>words1=newArrayList<>();//通过这个方法将书中所以单词存入word1中FileOperation.readFile("pride-and-prejudice.txt",words1);System.out.println("Totalwords:"+words1.size());LinkedListSet<String>set1=newLinkedListSet<>();//增强for循环,定一个字符串word去遍历words//底层的话会把ArrayListwords1中的值一个一个的赋值给wordfor(Stringword:words1)set1.add(word);//不添加重复元素System.out.println("Totaldifferentwords:"+set1.getSize());System.out.println("-------------------");System.out.println("PrideandPrejudice");//新建一个ArrayList存放单词ArrayList<String>words2=newArrayList<>();//通过这个方法将书中所以单词存入word1中FileOperation.readFile("a-tale-of-two-cities.txt",words2);System.out.println("Totalwords:"+words2.size());LinkedListSet<String>set2=newLinkedListSet<>();//增强for循环,定一个字符串word去遍历words//底层的话会把ArrayListwords1中的值一个一个的赋值给wordfor(Stringword:words2)set2.add(word);//不添加重复元素System.out.println("Totaldifferentwords:"+set2.getSize());}}
结果:
这里需要说明一下就是关于我们统计的单词数只考虑了每个单词组成的不用,并没有对单词的特殊形式做区分。
Java的优点是什么
1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Java是面向网络的语言;4. 鲁棒性,java提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。;5. 安全性,用于网络、分布环境下的Java必须防止病毒的入侵。6. 体系结构中立,只要安装了Java运行时系统,就可在任意处理器上运行。7. 可移植性,Java可以方便地移植到网络上的不同机器。8.解释执行,Java解释器直接对Java字节码进行解释执行。
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
Java底层基于链表如何实现集合和映射的详细内容,希望对您有所帮助,信息来源于网络。