java中怎么往集合类set里添加数据??

java中怎么往集合类set里添加数据??,第1张

java中往集合添加数据调用add();方法就行

//第一步先创建一个set集合的子类

HashSet has=new HashSet<>()

//给set集合添加的方法是add()

has.add(args)

资料拓展:

Collection接口可以存放重复元素,也可以存放不重复元素。List可以存放重复元素,Set就是不重复的元素。 

通过元素的equals方法,来判断是否为重复元素。 

Set集合取出元素的方式可以采用:迭代器,增强 for

python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.

sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的 *** 作。

下面来点简单的小例子说明把。

>>>x = set('spam')

>>>y = set(['h','a','m'])

>>>x, y

(set(['a', 'p', 's', 'm']), set(['a', 'h', 'm']))

再来些小应用。

>>>x &y # 交集

set(['a', 'm'])

>>>x | y # 并集

set(['a', 'p', 's', 'h', 'm'])

>>>x - y # 差集

set(['p', 's'])

记得以前个网友提问怎么去除海量列表里重复元素,用hash来解决也行,只不过感觉在性能上不是很高,用set解决还是很不错的,示例如下:

>>>a = [11,22,33,44,11,22]

>>>b = set(a)

>>>b

set([33, 11, 44, 22])

>>>c = [i for i in b]

>>>c

[33, 11, 44, 22]

很酷把,几行就可以搞定。

1.8 集合

集合用于包含一组无序的对象。要创建集合,可使用set()函数并像下面这样提供一系列的项:

s = set([3,5,9,10]) #创建一个数值集合

t = set("Hello") #创建一个唯一字符的集合

与列表和元组不同,集合是无序的,也无法通过数字进行索引。此外,集合中的元素不能重复。例如,如果检查前面代码中t集合的值,结果会是:

>>>t

set(['H', 'e', 'l', 'o'])

注意只出现了一个'l'。

集合支持一系列标准 *** 作,包括并集、交集、差集和对称差集,例如:

a = t | s # t 和 s的并集

b = t &s # t 和 s的交集

c = t – s # 求差集(项在t中,但不在s中)

d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)

基本 *** 作:

t.add('x')# 添加一项

s.update([10,37,42]) # 在s中添加多项

使用remove()可以删除一项:

t.remove('H')

len(s)

set 的长度

x in s

测试 x 是否是 s 的成员

x not in s

测试 x 是否不是 s 的成员

s.issubset(t)

s <= t

测试是否 s 中的每一个元素都在 t 中

s.issuperset(t)

s >= t

测试是否 t 中的每一个元素都在 s 中

s.union(t)

s | t

返回一个新的 set 包含 s 和 t 中的每一个元素

s.intersection(t)

s &t

返回一个新的 set 包含 s 和 t 中的公共元素

s.difference(t)

s - t

返回一个新的 set 包含 s 中有但是 t 中没有的元素

s.symmetric_difference(t)

s ^ t

返回一个新的 set 包含 s 和 t 中不重复的元素

s.copy()

返回 set “s”的一个浅复制

请注意:union(), intersection(), difference() 和 symmetric_difference() 的非运算符(non-operator,就是形如 s.union()这样的)版本将会接受任何 iterable 作为参数。相反,它们的运算符版本(operator based counterparts)要求参数必须是 sets。这样可以避免潜在的错误,如:为了更可读而使用 set('abc') &'cbs' 来替代 set('abc').intersection('cbs')。从 2.3.1 版本中做的更改:以前所有参数都必须是 sets。

另外,Set 和 ImmutableSet 两者都支持 set 与 set 之间的比较。两个 sets 在也只有在这种情况下是相等的:每一个 set 中的元素都是另一个中的元素(二者互为subset)。

创建set对象

为了管理set的二叉树链表数据,先用set容器的构造函数,创建一个set对象

(1) set()

用默认的less<T>函数对象和内存分配器,创建一个没有任何数据元素的set对象。

set<int>s //创建了空的set对象s,元素类型为整型int

(2) set(const key_compare&comp)

指定一个比较函数对象 comp 来创建set对象,内存分配器为默认值。

//定义字符串比较函数对象 strLess

struct strLess {

bool operatro() (const char *s1, const char *s2) const

{

return strcmp(s1, s2) <0

}

}

//创建set容器对象s

set<const char*, strLess>s(strLess())

(3)set(const set&)

set拷贝构造函数,通过红黑树的拷贝构造函数,实现两个set容器的元素、头结点和节点个数的拷贝。

//set<int>s1

set<int>s2 (s1)

(4)set(InputIterator first, InputIterator last)

用区间迭代器[first, last)所指的元素,创建一个set对象。

int iArray = { 13, 32,19 }

set<int>s(iArray, iArray+3)

(5)set(InputIterator first, InputIterator last, const key_compare&comp)

用区间迭代器[first, last)所指的元素和comp函数对象,创建一个set对象。

const char* szArray = {"hello", "dog", "bird" }

set<const char* , strLess>s(szArray, szArray+3, strLess() )

元素的插入

set没有尾部插入函数push_back(),元素的插入一般使用insert进行动态检索插入。

(1)pair<iterator, bool>insert(const value_type&v)

将元素v插入set容器,要求v值不与set容器的任何元素重复,否则插入失败。返回一个pair配对对象,提供所插入元素的迭代器位置和true/false插入成功标志。

(2)iterator insert(iterator position, const value_type&v)

将元素v插入set容器,参数position提示可在position位置之前插入v,所返回的插入位置视实际情况而定,不一定能在position位置之前插入。

(3)void insert(inputIterator fist, InputIterator last)

将某迭代器区间[first, last)所指的数据作为元素,插入到set容器。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11962641.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存