Collection之Set学习
<!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter" />
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0" />
<v:f eqn="sum @0 1 0" />
<v:f eqn="sum 0 0 @1" />
<v:f eqn="prod @2 1 2" />
<v:f eqn="prod @3 21600 pixelWidth" />
<v:f eqn="prod @3 21600 pixelHeight" />
<v:f eqn="sum @0 0 1" />
<v:f eqn="prod @6 1 2" />
<v:f eqn="prod @7 21600 pixelWidth" />
<v:f eqn="sum @8 21600 0" />
<v:f eqn="prod @7 21600 pixelHeight" />
<v:f eqn="sum @10 21600 0" />
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" />
<o:lock v:ext="edit" aspectratio="t" />
</v:shapetype><v:shape id="图片_x0020_0" o:spid="_x0000_i1025" type="#_x0000_t75"
alt="Collection_Set.jpeg" style='width:415.5pt;height:275.25pt;visibility:visible;
mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\yingkh\AppData\Local\Temp\msohtmlclip1\01\clip_image001.jpg"
o:title="Collection_Set" />
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
TreeSet和HahSet的区别:
HashSet 是哈希表实现的,无序的结合,表现为检索(contains)的时间复杂度是 o(0)
TreeSet 是红黑树实现的,排序的集合
TreeSet:
public class TreeSet<E>
extends AbstractSet<E>
implements
SortedSet<E>, Cloneable, java.io.Serializable
{
private transient
SortedMap<E,Object> m; // The backing Map
|
Add方法:
public boolean add(E o)
{
return m.put(o, PRESENT)==null;
}
|
M是一个TreeMap,treeMap的put方法如下:
public V put(K key, V value) {
Entry<K,V> t = root;
if (t == null) {
incrementSize();
root = new Entry<K,V>(key, value, null);
return null;
}
while (true) {
int cmp = compare(key, t.key);
if (cmp == 0) {
return t.setValue(value);
} else if (cmp < 0) {
if (t.left != null) {
t = t.left;
} else {
incrementSize();
t.left = new
Entry<K,V>(key, value, t);
fixAfterInsertion(t.left);
return null;
}
} else { // cmp > 0
if (t.right != null) {
t = t.right;
} else {
incrementSize();
t.right = new
Entry<K,V>(key, value, t);
fixAfterInsertion(t.right);
return null;
}
}
}
}
|
显然,TreeSet判断是否重复,是通过TreeMap的compare方法。
再看HashSet:
HashSet:
实现的接口和集成的类如下;
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>,
Cloneable, java.io.Serializable
{
static final long serialVersionUID =
-5024744406713321676L;
private transient
HashMap<E,Object> map;
|
可见,HashSet持有一个HashMap。
Add方法:
public boolean add(E
o) {
return map.put(o, PRESENT)==null;
}
|
HashMap的put方法:
public V put(K key, V value) {
K k = maskNull(key);
int hash = hash(k);
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
if (e.hash == hash && eq(k,
e.key)) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, k, value, i);
return null;
}
|
可见,HashSet主要是通过hashcode和equals方法来判断是否重复的。
分享到:
相关推荐
其中,`Collection`、`List`、`Set`和`Map`是四大基本接口,它们各自代表了一种特定的数据结构,有着不同的特性和用途。下面我们将详细探讨这些接口的区别及其相关知识点。 首先,`Collection`是所有集合类的顶级...
【标题】"SMS Spam Collection Data Set" 是一个用于短信分类的机器学习数据集,主要目的是帮助我们理解如何利用机器学习算法来识别垃圾短信(spam)。 【描述】提及的"Python机器学习:朴素贝叶斯那一章"指出,这...
在这个Java集合类的学习资料中,我们将深入探讨`Collection`以及与其相关的`TreeMap`、`Set`和`List`等概念。 首先,我们从`Collection`接口开始。`Collection`接口是`java.util`包下的核心接口,它定义了集合的...
本篇文章将深入解析`Collection`接口及其主要实现类`List`和`Set`,帮助你理解并熟练运用这些核心概念。 首先,`Collection`是所有单列集合的父接口,它定义了集合的基本操作,如添加元素、删除元素、检查元素存在...
Java集合Collection、List、Set、Map使用详解
SMS Spam Collection 是一组为 SMS Spam 研究收集的带有 SMS 标记的消息。它包含 5,574 条消息的一组英文 SMS 消息,根据合法或垃圾邮件进行标记。 这些文件每行包含一条消息。每行由两列组成:v1 包含标签(非垃圾...
本文将深入探讨Collection、List、Set、Map这四大接口以及它们的实现类,帮助你全面理解这些概念及其在实际开发中的应用。 **Collection接口** Collection是所有单值容器的顶级接口,它定义了所有集合的基本操作,...
### Collection Framework 学习笔记知识点概述 #### 一、Java5 Collection Framework 概览 - **数组类 Array**:在 Java 中,数组是最基础的数据结构之一,用于存储一系列连续的对象或基本类型的数据。数组的特点...
Set接口继承了Collection接口,提供了与Collection相同的基本方法,如添加元素(add)、判断是否为空(isEmpty)、删除元素(remove)等。然而,Set接口的独特之处在于它确保了集合中的元素都是唯一的。Set接口不允许插入...
集合框架包括了多种接口和类,如Collection、List、Set、Map等,它们各自有特定的功能和用途。 1. **集合框架概述** - **容器简介**:集合框架就是一组接口和类,它们定义了存储、检索和操作对象的标准方式。这些...
Collection作为Java集合框架中的核心接口,提供了一种存储和操作多个对象的方式,它包括List、Set、Queue等子接口,以及实现这些接口的具体类如ArrayList、HashSet、LinkedList等。下面将深入探讨Collection的使用及...
### Java Collection Framework 相关知识点 #### 一、引言 在 Java 领域,《Java Collection ...通过学习这本书,开发者可以更好地理解 Java Collection Framework 的工作原理,从而写出更高效、更安全的代码。
这意味着,对于一个给定的键,总有一个特定的值与之对应,反之亦然。`BiMap`的这种特性使得它在处理需要保持键值对双向关联的关系时特别有用,比如用于数据库主外键映射、配置文件的键值对管理等场景。在Guava中,`...
这个全面的案例集通过清晰的注释和简洁的代码展示了每个集合类和接口的核心功能,对于初学者和有经验的开发者来说都是极好的学习资源。通过实践这些示例,你可以更好地掌握Java集合框架,提升编程技能,更有效地解决...
【Collection集合基本练习1】是Java编程中关于...这个练习旨在帮助学习者理解Java集合框架的基本用法,包括集合的创建、操作、遍历以及对象的创建和操作。通过这个练习,可以提高对Java集合框架和面向对象编程的理解。
在Java编程语言中,`Set`接口是集合框架的一部分,它继承自`Collection`接口,提供了不允许重复元素的存储功能。在这个主题中,我们将深入探讨`Set`映射的概念,包括其基本原理、用途、以及如何在实际开发中运用。 ...
本节课程主要学习 Collection 集合,在后面的课程中将学习 Map 集合。Collection 是单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.List 和 java.util.Set。其中,...
Java集合的学习,以思维导图形式进行总结梳理,希望对我自己和大家的学习有所帮助,若有不对之处希望指出。
在学习Set和Map接口及其实现类时,应重点理解它们的存储特点、常用方法以及如何根据需求进行选择和使用。在实际开发中,Set常用于去重,而Map则用于存储和查找键值对应的数据。正确地理解和使用这些接口,能够极大地...
- Collection接口的两个重要的子接口是List和Set。 - **List**:有序集合,允许存储重复元素,可以通过索引来访问元素。常用实现类有ArrayList和LinkedList。 - **Set**:不允许存储重复元素,常见实现类有...