Java容器---Set: HashSet TreeSet LinkedHashSet

1.Set接口概述

       Set 不保存重复的元素(如何判断元素相同呢?)。如果你试图将相同对象的多个实例添加到Set中,那么它就会阻止这种重复现象。 Set中最常被使用的是测试归属性,你可以很容易地询问某个对象是否在某个Set中。 正因如此,查找就成为了Set中最重要的操作,因此你通常都会选择一个HashSet 的实现,它专门对快速查找进行了优化。

        Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为)。Set 是基于对象的值来确定归属性的。

java.util Interface Set<E>

参数类型 : 由此集合维护的元素的类型所有超类接口:Collection <E>, Iterable <E>所有子类接口:NavigableSet <E>, SortedSet <E>
所有已知实现类: AbstractSetConcurrentHashMap.KeySetViewConcurrentSkipListSetCopyOnWriteArraySetEnumSet ,  HashSetJobStateReasonsLinkedHashSetTreeSet

2.Set常用实现类

(1)HashSet

     HashSet继承AbstractSet类,实现Set、Cloneable、Serializable接口。由哈希表支持(实际上是一个HashMap实例,基于

HashMap来实现的,底层采用HashMap来保存元素。),天生就是为了提高查找效率的。

imageimage                

 

构造方法

image

所有方法

image

(2)TreeSet

     TreeSet 继承AbstractSet类,实现NavigableSet、Cloneable、Serializable接口。与HashSet是基于HashMap实现一样,TreeSet 同样是基于TreeMap 实现的。由于得到Tree 的支持,TreeSet 最大特点在于排序,它的作用是提供有序的Set集合。

image
参数类型
      E - 由此集合维护的元素的类型
All Implemented Interfaces(实现接口):
SerializableCloneableIterable <E>,Collection <E>,NavigableSet <E>
    Set <E>  SortedSet <E>

构造方法

image

常用方法

image

image

image

image

image

(3)LinkedHashSet

      LinkedHashSet 综合了链表+哈希表,根据元素的hashCode值来决定元素的存储位置,它同时使用链表维护元素的次序。

      当遍历该集合时候,LinkedHashSet 将会以元素的添加顺序访问集合的元素。

      对于 LinkedHashSet 而言,它继承与 HashSet、又基于 LinkedHashMap 来实现的。

imagepublic class LinkedHashSet<E> extends
HashSet<E> 
implements Set<E>,Cloneable,Serializable

参数类型E ---由此集合维护的元素的类型
All Implemented Interfaces(实现接口):
SerializableCloneableIterable <E>, Collection <E>, Set <E>              

构造方法

image

方法(基本都是继承方法)

image

3.set演示

(1)HashSet

  1 public class HashSetDemo {
  2 
  3 	/**
  4 	 * @param args
  5 	 */
  6 	public static void main(String[] args) {
  7 
  8 		//1,创建一个Set容器对象。
  9 		Set set = new HashSet();//如果该成LinkedHashSet,可实现有序。
 10 
 11 		//2,添加元素。
 12 		set.add("abc");
 13 		set.add("nba");
 14 		set.add("heihei");
 15 		set.add("haha");
 16 		set.add("heihei");
 17 
 18 		//3,只能用迭代器取出。
 19 		for (Iterator it = set.iterator(); it.hasNext();) {
 20 			System.out.println(it.next());
 21 		}
 22 
 23 	}
 24 
 25 }
 26 

(2)TreeSet 

  1 public class TreeSetDemo2 {
  2 
  3 	/**
  4 	 * @param args
  5 	 */
  6 	public static void main(String[] args) {
  7 
  8 		//初始化TreeSet集合明确一个比较器。
  9 		Set set = new TreeSet(new ComparatorByName());
 10 
 11 		set.add(new Student("xiaoqiang",20));
 12 		set.add(new Student("daniu",24));
 13 		set.add(new Student("xiaoming",22));
 14 		set.add(new Student("tudou",18));
 15 		set.add(new Student("daming",22));
 16 		set.add(new Student("dahuang",19));
 17 
 18 		for (Iterator it = set.iterator(); it.hasNext();) {
 19 			Student stu = (Student)it.next();
 20 			System.out.println(stu.getName()+"::"+stu.getAge());
 21 		}
 22 	}
 23 
 24 }
 25 /**/
 26  * 自定义一个比较器,用来对学生对象按照姓名进行排序。
 27  * @author Administrator
 28  *
 29  */
 30 public class ComparatorByName extends Object implements Comparator {
 31 
 32 	@Override
 33 	public int compare(Object o1, Object o2) {
 34 
 35 		Student s1 = (Student)o1;
 36 		Student s2 = (Student)o2;
 37 
 38 		int temp = s1.getName().compareTo(s2.getName());
 39 
 40 		return temp==0?s1.getAge()-s2.getAge():temp;
 41 	}
 42 
 43 }
 44 /
 45 public class Student implements Comparable {
 46 
 47 	private String name;
 48 	private int age;
 49 
 50 	public Student() {
 51 		super();
 52 
 53 	}
 54 	public Student(String name, int age) {
 55 		super();
 56 		this.name = name;
 57 		this.age = age;
 58 	}
 59 
 60 
 61 
 62 	/**
 63 	 *  覆盖hashCode方法。根据对象自身的特点定义哈希值。
 64 	 */
 65 	public int hashCode(){
 66 		final int NUMBER = 37;
 67 		return name.hashCode() + age*NUMBER;
 68 	}
 69 
 70 	/**
 71 	 * 需要定义对象自身判断内容相同的依据。覆盖equals方法。
 72 	 *
 73 	 */
 74 	public boolean equals(Object obj){
 75 
 76 		if(this == obj){
 77 			return true;
 78 		}
 79 
 80 		if(!(obj instanceof Student)){
 81 			throw new ClassCastException("类型错误");
 82 		}
 83 
 84 		Student stu = (Student)obj;
 85 
 86 		return this.name.equals(stu.name)&& this.age == stu.age;
 87 	}
 88 
 89 	public String getName() {
 90 		return name;
 91 	}
 92 	public void setName(String name) {
 93 		this.name = name;
 94 	}
 95 	public int getAge() {
 96 		return age;
 97 	}
 98 	public void setAge(int age) {
 99 		this.age = age;
100 	}
101 	@Override
102 	public String toString() {
103 		return "Student [name=" + name + ", age=" + age + "]";
104 	}
105 	/**
106 	 * 学生就具备了比较功能。该功能是自然排序使用的方法。
107 	 * 自然排序就年龄的升序排序为主。
108 	 */
109 	@Override
110 	public int compareTo(Object o) {
111 
112 		Student stu = (Student)o;
113 //		System.out.println(this.name+":"+this.age+"........"+stu.name+":"+stu.age);
114 		/*
115 		if(this.age>stu.age)
116 			return 1;
117 		if(this.age<stu.age)
118 			return -1;
119 		return 0;
120 		*/
121 
122 		/*
123 		 * 既然是同姓名同年龄是同一个人,视为重复元素,要判断的要素有两个。
124 		 * 既然是按照年龄进行排序。所以先判断年龄。在判断姓名。
125 		 */
126 		int temp = this.age - stu.age;
127 
128 		return temp==0?this.name.compareTo(stu.name):temp;
129 
130 	}
131 
132 
133 }
134 

 

2018-01-05

内容来自API1.8、Java编程思想、传智播客课程

转载于:https://www.cnblogs.com/zhuweiheng/p/8203763.html

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

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

相关文章

马斯克脑机接口遭质疑:不是新技术,没体现神经解码进展

来源&#xff1a;AI前线作者 | 李冬梅马斯克的脑机接口实验&#xff0c;一经发布&#xff0c;就引来了诸多关注&#xff0c;业内专家们对此实验的评价却褒贬不一。北京时间 8 月 29 日&#xff0c;Neuralink 公司发布的神秘技术终于揭开了它的面纱&#xff0c;在视频直播中&am…

坯子库和suapp哪个好用_「双全科技」进销存软件哪个简单好用,管家婆进销存软件教程...

进销存软件哪个简单好用&#xff0c;管家婆进销存软件教程随着国家信息化的发展越来越趋于成熟&#xff0c;越来越多的企业需要进销存软件来提高工作效率&#xff0c;企业家们不再采用传统的库存管理模式&#xff0c;进销存管理系统解决了企业日常经营中一系列库存问题&#xf…

吴恩达推荐笔记:22 张图总结深度学习全部知识

来源&#xff5c;Sophia知乎https://zhuanlan.zhihu.com/p/152362317编辑 | 公众号极市平台本文仅用于学术分享&#xff0c;如有侵权&#xff0c;联系后台作删文处理最近在做笔记查阅内容&#xff0c;觉得这个总结太美观了&#xff0c;真是棒&#xff01;吴恩达在推特上展示了一…

使用nfs映射远程服务器磁盘目录

参考&#xff1a;http://www.centoscn.com/CentosSecurity/SoftSecurity/2015/0408/5118.htmlhttp://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html说明&#xff1a; 本文是在MacOS上做客户端&#xff0c;因为MacOS内核是类Unix&#xff0c;所以本文也适用于Linux客…

ios笔试题算法_微软笔试题-Dijkstra算法

Dijkstra算法是典型的算法。Dijkstra算法是很有代表性的算法。Dijkstra一般的表述通常有两种方式&#xff0c;一种用永久和临时标号方式&#xff0c;一种是用OPEN, CLOSE表的方式&#xff0c;这里均采用永久和临时标号的方式。注意该算法要求图中不存在负权边。      用Dij…

自动驾驶车通过动作捕捉,学会阅读街上人们的肢体语言

来源&#xff1a;机器学习研究组订阅号 编译&#xff1a;lin想象一下&#xff0c;工人正在修复路面上一个大坑洞&#xff0c;因此拥有四条车道的马路缩小为两车道。一名工人左手松松地举着停车标志&#xff0c;用右手挥手示意汽车通过。如果是人来开车的话&#xff0c;自然不会…

AI解梦成为现实 未来还有无限可能

文章来源&#xff1a;学术头条编译&#xff1a;阳光排版&#xff1a;赵辰霞编审&#xff1a;王新凯古代巴比伦人认为梦境包含了预言&#xff0c;而古埃及人则将梦境视为神灵给予的信息来崇拜。在 19 世纪 90 年代&#xff0c;西格蒙德弗洛伊德&#xff08;Sigmund Freud&#x…

fiddler工具条、状态栏、请求信息栏各按钮的作用

1.fiddler工具条 2.fiddler状态栏 3.请求信息栏 转载于:https://www.cnblogs.com/kakaln/p/8198299.html

超9成SCI论文发在国外!中文期刊到底差在哪?

来源 | 科学网撰文 | 卜叶编辑 | 宗华学术界不投中文期刊的原因是什么&#xff1f;这一老生常谈的问题&#xff0c;最近再次出现在某知识问答平台热榜。短短两周&#xff0c;便吸引了180个回答&#xff0c;浏览量超过34万。中文期刊到底差在哪&#xff1f;面对逐渐边缘化的态势…

pyqt5 点击开始执行_《快速掌握PyQt5》第一章 PyQt5的起点

1.1 开始安装PyQt5就跟安装其他库的方法一样&#xff0c;非常简单&#xff1a;Windows上安装&#xff1a;pip install pyqt5Linux上安装&#xff1a;sudo apt-get install pyqt5-dev-toolsMacOS上安装&#xff1a;pip3 install pyqt5验证是否安装成功&#xff0c;只需要导入下该…

不用math type解决word公式上浮问题

今天来解决一下文档整理时候令人头痛的公式上浮问题。 问题 就是这种&#xff0c;以前碰见了简直就是无解&#xff0c;今天不管怎样&#xff0c;解决它&#xff01;&#xff01; 准备 开始前要检查一下公式是否是office math格式&#xff0c;如果不是&#xff0c;需要先转化成…

前沿研究丨基于驾驶脑的智能驾驶车辆硬件平台架构

本文选自中国工程院院刊《Engineering》2018年第4期作者&#xff1a;李德毅&#xff0c;高洪波来源&#xff1a;A Hardware Platform Framework for an Intelligent Vehicle Based on a Driving Brain[J].Engineering,2018,4(4):464-470.编者按智能驾驶车辆试验平台是人工智能科…

cogs2840. 二叉查找树

二叉查找树 时间限制&#xff1a;1 s 内存限制&#xff1a;512 MB 【题目描述】 二叉查找树是一种特殊的二叉树&#xff08;每个节点最多只有两个儿子的树&#xff09;。树的每个节点上存有一个唯一的值&#xff0c;并且满足&#xff1a;这个节点的左子树内所有点的值都比这个…

苹果挂端口方法_调音台变身直播声卡的方法

现在干直播的多了&#xff0c;搞音响的也可以利用自己手头的专业设备&#xff0c;把调音台变身为直播声卡&#xff0c;然后进行多通道的高品质混音直播。需要的条件&#xff1a;数字调音台或带有USB音频功能的模拟调音台苹果手机(本人没有安卓手机&#xff0c;就以苹果手机为例…

word删除所有的回车、空格

一、打开替换窗口 二、①删除回车 在查找内容中输入 ^p 在替换为中输入 ^s 或者空白 全部替换 ②删除空格 在查找内容中输入 ^w 在替换为中输入 空白 全部替换 三、总结 在Word中 ^p表示回车&#xff0c; ^s表示空白&#xff0c; ^w表示空格

xp的viostor驱动无法获取磁盘序列号的分析

深信服的viostor驱动在获取序列号的时候&#xff0c;多了一个IDE处理的代码&#xff0c;位置在1128处。它会在刚开机加载viostor.sys时机被调用&#xff0c;然后去读取注册表HKLM\\SYSTEM\CurrentControlSet\Services\viostor\Parameters的IDESNCompat&#xff0c;若为1则有此功…

十问亿级神经元类脑计算机:AI领域有望突破,哪些还需火候

来源&#xff1a;澎湃新闻近日&#xff0c;浙江大学联合之江实验室共同研制成功了中国首台基于自主知识产权类脑芯片的类脑计算机&#xff08;Darwin Mouse&#xff09;。研究团队在9月1日的成果发布会上指出&#xff0c;该类脑计算机在神经元规模上超越了德国海德堡大学的Brai…

网络加载空页面

空页面的显示很常用&#xff0c;所以自己做了一个通用的空页面显示&#xff0c;先看效果图 在有网络的时候正常加载显示&#xff0c;在没有网络的时候自动加载空页面&#xff0c;点击空页面重新加载网络请求的一个功能 1&#xff1a;定义一个xml页面&#xff0c;页面布局是一个…

excel有的单元文字可以超出单元格_excel单元格斜线

excel表格的强大功能&#xff0c;给办公带来了很多便捷&#xff0c;但是有很多强大的功能&#xff0c;其实我们都还不会用&#xff0c;如在做报表时&#xff0c;要用到给单元格加两条斜线&#xff0c;三条斜线时&#xff0c;有时就不知道怎么弄&#xff0c;两条或许会&#xff…

百度地图发布专网地图时空数据托管平台,构建智慧城市数字底盘

来源&#xff1a;百度地图“新基建”浪潮下&#xff0c;智慧城市的建设和发展进一步提速&#xff0c;作为智慧城市数字基础设施的地理信息系统&#xff0c;其数据体量也极大增长&#xff0c;对海量GIS数据集成、存储、管理、计算、表达、分析和应用等有关技术的创新发展提出了急…