核心技术java基础_JAVA核心技术I---JAVA基础知识(集合set)

一:集合了解

(一)确定性,互异性,无序性

确定性:对任意对象都能判定其是否属于某一个集合

互异性:集合内每个元素都是无差异的,注意是内容差异

无序性:集合内的顺序无关

(二)集合接口HashSet,TreeSet,LinkedHashSet

–HashSet (基于散列函数的集合,无序,不支持同步)

–TreeSet (基于树结构的集合,可排序的,不支持同步)

–LinkedHashSet(基于散列函数和双向链表的集合,可排序的,不支持同步

3e01e692354509759451a02b36498d23.png

二:HashSet

(一)基础方法

–基于HashMap实现的,可以容纳null元素, 不支持同步

Set s= Collections.synchronizedSet(newHashSet(...));

–add 添加一个元素

–clear 清除整个HashSet

–contains 判定是否包含一个元素

–remove 删除一个元素 size 大小

–retainAll 计算两个集合交集

(二)HashSet实现

HashSet hs = new HashSet(); //<>是泛型编程,类似于C++模板

hs.add(null);

hs.add(10000);

hs.add(22);

hs.add(1010);

hs.add(50001010);

hs.add(101035);

hs.add(3);

System.out.println(hs.size());if(!hs.contains(6)) {

hs.add(6);

}

System.out.println(hs.size());

hs.remove(4);  //存在,则删除,不存在,则不操作for(Integer item : hs) {

System.out.println(item);

}

7

8

null  //无序性

10000

1010

3

22

6

50001010

101035

(三)性能测试:因为无序性,无索引操作。for效率高

public static void trverseByIterator(HashSeths) {//使用迭代器遍历

System.out.println("==========迭代器遍历===========");long startTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。

Iterator iter = hs.iterator(); //获取迭代指针

while(iter.hasNext()) {

iter.next();

}long endTime =System.nanoTime();long duration = endTime-startTime;

System.out.println("iterator使用纳秒:"+duration);

}public static void trverseByFor(HashSeths) {//使用迭代器遍历

System.out.println("==========for索引遍历===========");long startTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。

for(Integer item : hs) {

;

}long endTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。

long duration = endTime-startTime;

System.out.println("for使用纳秒:"+duration);

}

==========迭代器遍历===========iterator使用纳秒:5738665

==========for索引遍历===========for使用纳秒:2721950

(四)retainAll交集测试

//测试交集

HashSet hs1 = new HashSet();

HashSet hs2 = new HashSet();

hs1.add("a");

hs1.add("b");

hs1.add("c");

hs2.add("c");

hs2.add("d");

hs2.add("e");

hs1.retainAll(hs2);//将交集保存在hs1中

for(String item : hs1) {

System.out.println(item);

}

c

三:LinkedHashSet(与HashSet一致)

–继承HashSet,也是基于HashMap实现的,可以容纳null元素,按照插入顺序有序

–不支持同步

Set s= Collections.synchronizedSet(newLinkedHashSet(...));

–方法和HashSet基本一致

add, clear, contains, remove, size

–通过一个双向链表维护插入顺序

四:TreeSet

(一)基本方法

–基于TreeMap实现的,不可以容纳null元素,不支持同步

SortedSet s= Collections.synchronizedSortedSet(newTreeSet(...));

–add 添加一个元素

–clear 清除整个TreeSe

–contains 判定是否包含一个元素

–remove 删除一个元素 size 大小

–根据compareTo方法或指定Comparator排序

(二)实现(有序,会自动排序,红黑树)

TreeSet ts = new TreeSet(); //<>是泛型编程,类似于C++模板

ts.add(1000);

ts.add(15300);

ts.add(100);

ts.add(3);

ts.add(566000);if(!ts.contains(4)) {

ts.add(4);

}

for(Integer item : ts) {

System.out.println(item);;

}

4

100

1000

15300

566000

(三)性能测试:for更加高效

==========迭代器遍历===========iterator使用纳秒:9246423

==========for索引遍历===========for使用纳秒:3366874

五:HashSet, LinkedHashSet, TreeSet对象比较(元素重复)《重点》

(一)HashSet和LinkedHashSet判定元素重复的原则

–判定两个元素的hashCode返回值是否相同,若不同,返回false

–若两者hashCode相同,判定equals方法,若不同,返回false;否则返回true。

–hashCode和equals方法是所有类都有的,因为Object类有

比较之前会先调用hashCode,之后是equals方法

1.正常执行,含重复

classDog{intage;public Dog(inta) {this.age=a;

}

}public classCompareTest {public static voidmain(String[] args) {

Dog d1=new Dog(10);

Dog d2=new Dog(10);

HashSet hs=new HashSet();

hs.add(new Dog(10));

hs.add(new Dog(1));

hs.add(new Dog(3));

hs.add(new Dog(10));

hs.add(new Dog(10));

System.out.println(hs.size());

}

}

5

Dog类本身没有hashCode方法,继承于Object,而Object类的hashCOde会返回对象信息和内存地址经过运算后的一个值。两个不同对象,其值必然不一致

2.实现对象的hashCode方法和equals方法实现去重

import java.util.*;classDog{intage;public Dog(inta) {this.age=a;

}public intgetAge() {return this.age;

}public inthashCode() {

System.out.println("hashCode exec...");return this.age;

}publicboolean equals(Object obj2) {

System.out.println("equals exec...");if(0==this.age-((Dog)obj2).getAge())return true;else

return false;

}

}public classCompareTest {public static voidmain(String[] args) {

Dog d1=new Dog(10);

Dog d2=new Dog(10);

HashSet hs=new HashSet();

hs.add(new Dog(10));

hs.add(new Dog(1));

hs.add(new Dog(3));

hs.add(new Dog(10));

hs.add(new Dog(10));

System.out.println(hs.size());

}

}

hashCode exec...

hashCode exec...

hashCode exec...

hashCode exec...

equals exec...

hashCode exec...

equals exec...3  //去重实现

先执行hashCode,只有hashCode通过,才会执行equals方法

publicString toString() {

System.out.println("toString exec...");return age+"";

}

要保持equals,hashCode和toString三位一体。都应该各自相同

(二) TreeSet去重

添加到TreeSet,需要实现Comparable接口,即实现compareTo方法

与hashCode和equals无关,只与compareTo有关

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

import java.util.*;classDog implements Comparable{intage;public Dog(inta) {this.age=a;

}public intgetAge() {return this.age;

}public inthashCode() {

System.out.println("hashCode exec...");return this.age;

}publicboolean equals(Object obj2) {

System.out.println("equals exec...");if(0==this.age-((Dog)obj2).getAge())return true;else

return false;

}publicString toString() {

System.out.println("toString exec...");return age+"";

}public intcompareTo(Object obj2) {

System.out.println("compareTo exec...");return this.age -((Dog)obj2).getAge();

}

}public classCompareTest {public static voidmain(String[] args) {

Dog d1=new Dog(10);

Dog d2=new Dog(10);

TreeSet hs=new TreeSet();

hs.add(new Dog(10));

hs.add(new Dog(1));

hs.add(new Dog(3));

hs.add(new Dog(10));

hs.add(new Dog(10));

System.out.println(hs.size());

}

}

View Code

compareTo exec...

compareTo exec...

compareTo exec...

compareTo exec...

compareTo exec...

compareTo exec...

compareTo exec...

compareTo exec...3

可以知道,去重和hashCode与equals无关,不执行。而是直接去找compareTo方法

六:总结

(一)HashSet, LinkedHashSet, TreeSet的元素都只能是对象

会进行自动装箱

(二)HashSet和LinkedHashSet判定元素重复的原则《重点》

–判定两个元素的hashCode返回值是否相同,若不同,返回false

–若两者hashCode相同,判定equals方法,若不同,返回false;否则返回true。

–hashCode和equals方法是所有类都有的,因为Object类有

(三)TreeSet判定元素重复的原则《重点》

–需要元素继承自Comparable接口

–比较两个元素的compareTo方法

(四)注意:对于基本类型的包装类。本来就实现了compareTo接口和其他比较方法,所以HashSet,LinkedHashSet,TreeSet中对于包装类是默认去重的

c87bb14eea71500140e9d0e14c223e1e.png

cb2f1a26d66cacd6d8ad1953727ac81e.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nba数据库统计_NBA板块的价值-从统计学上讲

nba数据库统计The idea is not to block every shot. The idea is to make your opponent believe that you might block every shot. — Bill Russel这个想法不是要阻止每一个镜头。 这个想法是让你的对手相信你可能会阻挡每一个投篮。 —比尔罗素 The block in basketball ha…

【炼数成金 NOSQL引航 三】 Redis使用场景与案例分析

验证redis的主从复制&#xff0c;将实验过程抓图 复制配置文件 更改slave的端口 和相关master配置 主从复制测试 研究在OAuth中的“一次数”nonce有什么用途&#xff1f;怎样使用&#xff1f;以此熟悉OAuth的全流程 nonce &#xff0c;一个随机的混淆字符串&#xff0c;仅仅被…

js建立excel表格_建立Excel足球联赛表格-传统vs动态数组方法

js建立excel表格介绍 (Introduction) I am going to show you the different ways you can build a football league table in Excel. Some of the methods are old school but others utilise Excel’s new capabilities.我将向您展示在Excel中建立足球联赛表格的不同方法。 其…

postman+newman生成html报告

作为测试菜鸟,在学习postmannewman的使用过程中真的是颇费周折......没办法技术太菜,只能多学习. postman的下载安装不多言说,下载地址:https://www.getpostman.com/downloads/ newman的安装过程: 1.首先需要安装node.js,可以去官网下载,地址:https://nodejs.org/en/#download …

java jdk1.9新特性_JDK1.9-新特性

1. Java平台级模块系统该特性使Java9最大的一个特性&#xff0c;Java提供该功能的主要的动机在于&#xff0c;减少内存的开销&#xff0c;JVM启动的时候&#xff0c;至少会有30~60MB的内存加载&#xff0c;主要原因是JVM需要加载rt.jar&#xff0c;不管其中的类是否被classload…

两个链接合并_如何找到两个链接列表的合并点

两个链接合并了解问题 (Understand the Problem) We are given two singly linked lists and we have to find the point at which they merge.我们给了两个单链表&#xff0c;我们必须找到它们合并的点。 [SLL 1] 1--->3--->5 \ …

安装veket到移动硬盘NTFS分区

如果你已经看过《手动安装veket到硬盘》和《简单的将veket安装到U盘的方法》两篇文章并且安装成功的话&#xff0c;说明不适用本文的安装环境&#xff0c;就不用往下看了。 《手动安装veket到硬盘》一文采用grub4dos来引导硬盘上的veket&#xff0c;主要是用来在本机已安装Wind…

简书使用小技巧

1、不同字体  在 设置->基础设置->富文本 模式下可以实现 2、添加图片&#xff0c;让文章更生动 3、添加代码框 &#xff01;注意&#xff1a;设置为Markdown模式后&#xff0c;只对新创建的文章起作用。转载于:https://www.cnblogs.com/HMJ-29/p/7049540.html

杭电2064

此题是一道简单的递归 此题是一道递归运算题&#xff0c;这题又是一道汉诺塔问题&#xff01;&#xff01;&#xff01;只要了解其规律&#xff0c;呵呵&#xff0c;你就可以很快AC了&#xff01;&#xff01; 这是一般的汉诺塔问题的解题方法照片&#xff01;&#xff01;&…

阻塞队列实现

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;JavaEE &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 阻塞队列 1. 什么是阻塞队列2. 标准库中的…

scrape创建_确实在2分钟内对Scrape公司进行了评论和评分

scrape创建网页搜罗&#xff0c;数据科学 (Web Scraping, Data Science) In this tutorial, I will show you how to perform web scraping using Anaconda Jupyter notebook and the BeautifulSoup library.在本教程中&#xff0c;我将向您展示如何使用Anaconda Jupyter笔记本…

java jol原理_Java对象布局(JOL)实现过程解析

java对象布局JOL(java object layout),描述对象在堆内存的布局。如下图&#xff1a;1.markword 固定长度8byte&#xff0c;描述对象的identityhashcode&#xff0c;分代年龄&#xff0c;锁信息等(https://www.jb51.net/article/183984.htm)&#xff1b;2.klasspoint 固定长度4b…

java入门学习_Java入门学习进阶知识点

Java入门学习进阶知识点入门阶段&#xff0c;主要是培养Java语言的编程思想。了解Java语言的语法&#xff0c;书写规范等&#xff0c;掌握Eclipse、MyEclipse等开发工具&#xff0c;编写Java代码的能力。学完这个阶段你应该可进行小型应用程序开发并且可以对数据库进行基本的增…

JDBC 数据库连接操作——实习第三天

今天开始了比较重量级的学习了&#xff0c;之前都是对于Java基础的学习和回顾。继续上篇的话题&#xff0c;《谁动了我的奶酪》&#xff0c;奉献一句我觉得比较有哲理的话&#xff1a;“学会自嘲了,而当人们学会自嘲,能够嘲笑自己的愚蠢和所做的错事时,他就在开始改变了。他甚至…

java基本特性_Java面试总结之Java基础

无论是工作多年的高级开发人员还是刚入职场的新人&#xff0c;在换工作面试的过程中&#xff0c;Java基础是必不可少的面试题之一。能不能顺利通过面试&#xff0c;拿到自己理想的offer&#xff0c;在准备面试的过程中&#xff0c;Java基础也是很关键的。对于工作多年的开发人员…

php 匹配图片路径_php正则匹配图片路径原理与方法

下面我来给大家介绍在php正则匹配图片路径原理与实现方法&#xff0c;有需要了解的朋友可进入参考参考。提取src里面的图片地址还不足够&#xff0c;因为不能保证那个地址一定是绝对地址&#xff0c;完全的地址&#xff0c;如果那是相对的呢&#xff1f;如果地址诸如&#xff1…

数据科学 python_适用于数据科学的Python vs(和)R

数据科学 pythonChoosing the right programming language when taking on a new project is perhaps one of the most daunting decisions programmers often make.在进行新项目时选择正确的编程语言可能是程序员经常做出的最艰巨的决定之一。 Python and R are no doubt amon…

win10专业版激活(cmd方式)

转载于:https://www.cnblogs.com/bug-baba/p/11225322.html

命令行窗口常用的一些小技巧

一. 打开命令行窗口的方式 1. 按住【shift】键&#xff0c;在桌面右击&#xff0c;选择“在此处打开命令行窗口(W)”,如下图所示&#xff1a; 2. 按住【开始】 R快捷键&#xff0c;弹出运行窗口&#xff0c;输入cmd&#xff0c;回车&#xff08;确定&#xff09;即可。 二. 常用…

为什么即使在班级均衡的情况下,准确度仍然令人困扰

Accuracy is a go-to metric because it’s highly interpretable and low-cost to evaluate. For this reason, accuracy — perhaps the most simple of machine learning metrics — is (rightfully) commonplace. However, it’s also true that many people are too comfo…