`

java简介以及迅速交接java(十五)

阅读更多

实现堆栈
1,数组(ArrayList,增删效率比较低,不适合)
2,LinkedList(实现堆栈的好方法)
3,java.util.Stack类,Stack是Vector的子类,Vector类是一个线程安全的(是一个重量级的类),并继承了Vector的方法,Verctor类(这个类也是List接口的实现类)和ArrayList的功能近乎相同。(不推荐使用Stack类来实现堆栈)。
Set接口的实现类
Set接口
SortedSet接口
TreeSet类
HashSet类
LinkedSet类
1)HashSet
Set的实现类的集合对象中不能够有重复元素,HashSet也一样他是使用了一种标识来确定元素的不重复,HashSet用一种算法来保证HashSet中的元素是不重复的,HashSet的底层实现还是数组。
Object类中的hashCode()的方法是所有子类都会继承这个方法,这个方法会用Hash算法算出一个Hash(哈希)码值返
回,HashSet会用Hash码值去和数组长度取模,模(这个模就是对象要存放在数组中的位置)相同时才会判断数组中的元素和要加入的对象的内容是否相同,如果不同才会添加进去。如果数组中的元素和要加入的对象的hashCode()返回了相同
的Hash值(相同对象),才会用equals()方法来判断两个对象的内容是否相同。

Hash算法是一种散列算法。
注意:所以要存入HashSet的集合对象中的自定义类必须覆盖hashCode(),equals()两个方法,才能保证集合中元素容不重复。在覆盖和hashCode()方法时,要使相同对象的hashCode()方法返回相同值,覆盖equals()方法再判断其内容。为了保证效率,所以在覆盖hashCode()方法时,也要尽量使不同对象尽量返回不同的Hash码值。
例:
要向HashSet中的添加自定义类型的对象并保证对象在HashSet中的唯一性的话,就要覆盖hashCode()方法
和equals()方法。

import java.util.*;
public class TestSet {
public static void main(String[] args) {
Set s=new HashSet();
TarenaStudent s1=new TarenaStudent("Liucy",30);
TarenaStudent s2=new TarenaStudent("Hiloo",29);
TarenaStudent s3=new TarenaStudent("Chenzq",33);
TarenaStudent s4=new TarenaStudent("Liucy",30);
s.add(s1);
s.add(s2);
s.add(s3);
s.add(s4);
System.out.println();
print(s);
}
static void print(Collection c){
Iterator it=c.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
class TarenaStudent{
String name;
int age;
public TarenaStudent(String name, int age) {
super();
// TODO Auto-generated constructor stub
this.name = name;
this.age = age;
}
public String toString(){
return "Student: "+name+" age="+age;
}
public boolean equals(Object o){
System.out.println(this+" equals "+o);
if (o==null) return false;
if (this==o) return true;
if (o.getClass()!=this.getClass()) return false;
TarenaStudent t=(TarenaStudent)o;
if ((this.name.equals(t.name)) && this.age==t.age) return true;
else return false;
}
public int hashCode(){
return this.name.hashCode()+this.age;
}
}

 结果:

Student: Liucy age=30 equals Student: Liucy age=30

Student: Chenzq age=33
Student: Liucy age=30
Student: Hiloo age=29


LinkedSet是Set接口的实现类,他的底层是用链表实现的,他的增删效率很高,常用于过滤重复对象。
SortedSet接口是Set的子接口。
TreeSet是SortedSet接口的实现类,他可以对集合中的元素进行排序。
要存放在TreeSet中自定义类的对象,这个类要么是已经实现了Comparable接口,要么是能给出Comparator比较
器,TreeSet可以自动过滤掉重复元素所以不用重载hashCode()方法,TreeSet会根据比较规则判断元素内容是否相
同,TreeSet会在元素存入世就进行了排序。(在TreeSet给出排序规则时,一定要注意对象内容相等的条件,一定要注意在
主观的认为两个对象内容相同时,才可以使用比较少的条件来进行判断)
在要排序时才使用TreeSet类(存储效率比较低),HashSet的存储效率比较高,在需要为HashSet的对象排序时,就可以把HashSet中的元素放入TreeSet。
Map接口的实现类
Map接口
SortedMap接口
TreeMap类
HashMap类
Hashtable类
Properties类
Map中只可以存放键值对(Key,value),其中Key是不可以重复的。Key和value是一一对应的。

HashMap,是Map接口的实现类,Key时无序存放的,其中Key是不可以重复的,它也是通过Hash码值来保证Key不重复的,Key和value是一一对应的。如果要加入的键值对和HashMap中键值对的Key是相同的就会将这个集合中的Key所队应的value值进行覆盖,在使用自定义类型作为Key时,那就是要覆盖hashCode(),equals()方法,也就是和HashSet中要放入自定义类型是的处理方法相同。这个类的对象是线程不安全的。
在遍历Map时,要使用其keySet()方法获得Key的一个Set集合,可以通过遍历这个Set,用get()方法来获得Key所对应
的value,也就遍历了Map。
Hashtable,也是Map接口的实现类,他和HashMap比较相似,只不过这个类对象是重量级的,是线程安全的。他不允
许Key和value为null。
Properties,这个类是Hashtable的子类,他的Key和value只能是字符串String类型。
SortedMap是Map的子接口
TreeMap,是SortedMap的实现类,他会按照Key进行排序。和TreeSet类一样,在使用自定义类作Key时,要用自定义类实现Comparable接口。
注意:其实HashSet底层就是一个HashMap,只不过其中的value值都是null值,而HashMap的底层是用数组实现的。
完整的集合框架
Collection接口
List接口
ArratList类
LinkedList类
Set接口
SortedSet接口
TreeSet类
HashSet类
LinkedSet类
Map接口
SortedMap接口
TreeMap类
HashMap类
Hashtable类
Properties类

分享到:
评论

相关推荐

    java项目开发验收交接整套模板

    在Java项目开发中,验收与交接是至关重要的环节,确保项目的质量和稳定性,同时为后续的维护和升级奠定基础。此"java项目开发验收交接整套模板"提供了全面的指导材料,帮助开发者和团队规范地完成这一过程。以下是...

    IT项目交接文档示例

    本示例中的"IT项目交接文档"着重于Java项目,旨在帮助接收者理解项目结构、功能、技术选型以及维护流程。 在Java项目交接过程中,以下知识点尤为重要: 1. **项目概述**:交接文档应包含项目的基本信息,如项目...

    java2word 文档

    在本文中,我们将深入探讨Jacob组件,Java2Word的安装和使用,以及一些开发示例。 1. **Jacob组件简述**: Jacob全称为JAVA-COM Bridge,它提供了一个接口,使得Java开发者能够通过JNI(Java Native Interface)...

    java文档规范

    在Java开发中,良好的文档能够帮助开发者快速理解代码的功能、用途以及使用方法,从而提高开发效率。本文将详细阐述Java文档规范,并提供一些实践指导。 1. Javadoc介绍: Javadoc是Java语言内置的工具,用于自动...

    java物流配送管理系统毕业论文

    Java物流配送管理系统毕业论文 本论文旨在设计和实现一个基于Java的物流配送管理系统,使用B/S结构,旨在提高物流公司的运营效率和降低成本。系统使用MyEclipse作为系统开发环境,使用Oracle作为后台数据库,使用...

    基于快速入门的应届生2天掌握Java框架的设计源码

    本项目是一个快速入门Java框架的设计源码,旨在帮助应届生在没有任何Java框架基础、学习成绩中等或偏下的情况下,仅用2天时间即可入门并参与研发工作。项目包含811个文件,其中JavaScript文件244个、Java文件152个、...

    The java. util. concurrent synchronizer framework.pdf

    在Java 5.0版本中,Java并发包引入了AQS框架,用于简化各种同步器的构建,例如互斥锁、读写锁、信号量、屏障、未来对象、事件指示器和交接队列等。这些同步器可以使用AQS框架快速构建,从而提高开发效率并减少实现的...

    Java的编程规范

    ### Java的编程规范 #### 为什么要有编码规范 在软件工程中,编码规范的重要性不容忽视。根据统计,软件在其整个生命周期中的成本分配显示,大约80%的成本是用于后期的维护工作,而非初始的开发阶段。这意味着软件...

    人力资源管理系统 java web 完整项目 包含源码和数据库

    通过Java Web技术,可以实现员工信息的增删改查操作,方便管理者快速获取和更新员工资料。 2. 招聘管理:系统能够发布招聘信息,收集应聘者简历,进行初步筛选。此功能可以帮助企业更有效地寻找合适的候选人,减少...

    基于自研的流程设计器 + 自研后端Java工作流引擎,组成了一套纯JSON数据交互的自研工作流引擎系统 +工作流管理系统

    本系统无论前端还是后端,其学习成本明显低于开源工作流引擎及附带流程设计器,能够快速上手前后端实现逻辑,更方便用户快速进行二次开发。本系统前端流程设计器,采用Vue ElementUI + 自研实现,支持可任意托拉拽与...

    软件离职员工项目交接.pdf

    3. **工作交接清单**:交接清单应详尽无遗,包括每个模块的完成情况、负责人、开发时间和预期完成时间,以及对每个模块的评价,这有助于新接手者快速理解和评估项目进度。 4. **责任确认**:离职员工需签署文档,...

    基于JAVA的物流配送管理系统毕业设计书.doc

    技术可行性上,Java和MyEclipse的组合提供了强大的开发支持,ORACLE数据库的稳定性和高效性确保了数据的安全存储和快速访问。由于系统设计思路清晰,对开发者的技术要求相对较低,便于理解和实现。因此,基于JAVA的...

    人事管理java项目系统6

    Struts2的核心功能包括动作调度、结果渲染、请求处理以及强大的插件架构,这使得开发者可以轻松地处理用户请求,实现业务逻辑与展示层的分离,提高代码的可维护性和可扩展性。 SQL Server作为数据库管理系统,是...

    图书管理系统java.doc

    管理员切换功能允许不同管理员在系统中快速切换,提供无缝的工作交接体验。 4. 读者管理 读者管理包括读者添加、修改、查询和删除。读者添加时,需输入图书证号、姓名、性别、系别和班级等信息。读者查询支持按图书...

    基于JAVA的物流配送管理系统毕业设计书.docx

    在当今快速发展的社会背景下,尤其是信息技术的飞速发展,传统的物流运输方式已经不能满足现代社会的需求,亟需一种新型高效的物流管理模式来提升整体效率和服务质量。此基于Java的物流配送管理系统旨在通过构建一个...

    java编程规范

    - **代码交接**:很少有软件只由最初开发者维护,规范确保新接手者能快速理解代码。 - **可读性**:良好的代码风格提高代码可读性,利于团队沟通。 - **产品发布**:源码作为产品的一部分,需保持整洁且无误。 2...

    基于java web+ssm的中小型人力资源管理系统.zip

    《基于Java Web+SSM的中小型人力资源管理系统》是一款利用现代技术构建的企业级应用,主要针对中小型企业的人力资源管理需求。系统采用Java Web技术栈,结合Spring、SpringMVC和MyBatis(简称SSM)框架,实现了高效...

    2022年java程序员辞职报告汇编6篇.docx

    2. **技术提升需求**:Java程序员通常会寻求持续的技术提升,以适应快速变化的IT行业。如果长时间没有显著的技术进步,可能会感到不满并考虑离职。 3. **薪资待遇问题**:薪资待遇是员工满意度的重要组成部分。当...

    JAVA编码规范.doc

    - 代码交接:几乎不可能由最初开发人员一直维护软件,因此规范能让接手者快速理解。 - 可读性:良好的编码规范使代码更易读,降低理解难度。 - 代码质量:规范化的源码就像精心包装的产品,清晰无误。 - 执行...

    Java毕业设计:基于SpringBoot的同城网上失物招领系统的设计与实现(源码+录像演示).zip

    1. 技术选型:项目选用Java作为主要开发语言,SpringBoot作为核心框架,它简化了Spring应用的初始搭建以及开发过程。SpringData JPA用于数据库操作,使得数据库访问更加简单直观。Thymeleaf作为模板引擎,提供了与...

Global site tag (gtag.js) - Google Analytics