-
2021-02-12 19:04:41
package test2;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class TestSet {
public static void main(String[] args) {
Set set = new HashSet();
set.add("set1");
set.add("开始");
set.add(871);
set.add(2.98);
set.add("金融");
System.out.println(set);
if(!set.isEmpty()){
System.out.println(set.iterator().next());//迭代取第一个
System.out.println(set.toArray()[0]);//变为数组取第一个
}
List list=new ArrayList(set);
System.out.println(list.get(0));//变为list取第一个
}
}
更多相关内容 -
离散数学 习题篇 —— 集合中有多少个元素
2019-10-24 22:46:19第一行是一个整数N(0≤N≤10 5 ,接下来有N行,每行一个整数(范围[−10 5 ,105 ]),表示集合中的元素。 输出格式: 一个整数,表示集合中元素的个数。 输入样例: 4 2 2 1 3 输出样例: 3 题解: ...题目:
集合中元素是互异的,输入一系列整数作为一个集合中的元素,计算集合中元素的个数。
输入格式:
第一行是一个整数N(0≤N≤10 5 ,接下来有N行,每行一个整数(范围[−10 5 ,105 ]),表示集合中的元素。
输出格式:
一个整数,表示集合中元素的个数。
输入样例:
4
2
2
1
3输出样例:
3
题解:
首先,题目说的很明确,集合中的元素是互异的,也就是说,没有相同的元素。比如1 1 1 1 2,输入了5个数但是实际上集合的元素数目是2。
那么,什么样子的数据结构才有这样的性质呢,我们可以用一个二叉搜索树。。。
在C++的STL里面有个叫做set的模板,python里也有个set,Java里有个HashSet的泛型,这都是已经实现好的集合,直接拿来用就可以了。
当然,这个集合是个有序集合。
没啥好说的,直接上代码吧C++版:
#include <bits/stdc++.h> using namespace std; int main(int argc, char const *argv[]) { //创建集合 set<int> ans; int n ; cin >> n; //向集合中插入元素 while(n--) { int a; cin >> a; ans.insert(a); } //输出集合大小 cout << ans.size(); return 0; }
Python版:
n = int(input()) ans = set() while n: ans.add(int(input())) n -= 1 print(len(ans))
Java版:
import java.util.HashSet; import java.util.Scanner; /** * Main */ public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); HashSet<Integer> ans = new HashSet<>(); int n = in.nextInt(); while(n > 0) { int e = in.nextInt(); ans.add(e); n--; } System.out.println(ans.size()); in.close(); } }
-
set集合判断集合中是否有无元素_算法:如何使用C++实现一个简单的集合类
2020-11-21 12:08:47实现一个集合类,要求实现以下4个操作。(1)向集合中添加元素,如果集合中已存在元素则不添加(2)从集合中移除元素,移除之前需要先判断集合中元素是否存在(3)重载+运算符,用以实现集合的求并集运算(4)重载*...来自于C++程序设计的一个题目。实现一个集合类,要求实现以下4个操作。
(1)向集合中添加元素,如果集合中已存在元素则不添加
(2)从集合中移除元素,移除之前需要先判断集合中元素是否存在
(3)重载+运算符,用以实现集合的求并集运算
(4)重载*运算符,用以实现集合的求交集运算
1.类的整体设计
该问题需要模拟实现集合类,我们可以使用数组来模拟集合,于是使用int items[100]用来存放集合中的数据。为了实现数组的遍历,这就需要一个整数用来表示数组中元素的个数,于是使用int number来表示数组中元素的个数;此外,为了实现题目的需求,设计以下四个函数:
1.使用add_item(int item)成员函数向数组中添加元素
2.使用remove_item(int item)成员函数向数组中移除元素
3.重载operator+表示集合的求并集运算
4.重载operator*表示集合的求交集运算
由于向集合添加元素之前,必须确保集合中不存在该元素;在从集合中移除元素之前,必须确保集合中存在该元素,因此添加is_exist(int item)方法用以判断集合中是否存在这个元素;此外为了显示集合,添加display()方法, 基本设计如下:
class Set
{
public:
int items[100]; //定义一个数组作为容器存放100个集合元素
int number; //定义数字i表示集合中元素的个数
//构造函数和析构函数
Set() {
this->number = 0;
memset(this->items,0,sizeof(items));
}
//初始化方法
int init(int items[], int num);
//添加元素
bool add_item(int item);
//删除元素
bool remove_item(int item);
//求集合的并集
Set operator+ (Set set2);
//求集合的交集
Set operator* (Set set2);
//显示集合元素
int display();
//判断集合当中是否存在item,返回元素在集合中的位置,不存在返回-1
int is_exist(int item);
};2.构造函数
Set() {
this->number = 0;
memset(this->items,0,sizeof(items));
}在构造函数中,我们对数组进行初始化,声明完数组之后,如果不进行初始化,数组元素是随机值,在C语言中,变量不进行初始化都会被分配随机值。为了避免这种情况,我们使用memset函数对数组items所有元素全部赋值为0;同时,由于此时数组中没有元素,即元素个数为0,我们的number也应当赋值为0.
3.判断数组中是否包含元素 item
int Set::is_exist(int item)
{
for(int i=0; i< this->number; i++) {
if(this->items[i] == item) {
return i;
}
}
return -1;
}该函数用于判断数组中是否存在item元素,如果存在就返回item元素的位置,如果不存在就返回-1. 判断方法非常简单,写一个for循环从items[0]-items[number-1]一个一个进行遍历。如果相等,直接返回i,此时i就是数组中item元素的位置;如果遍历完整个数组之后,都没有发现与item相等的数组元素,说明数组中不存在item这个元素,于是返回-1.
4.向数组中添加元素
bool Set::add_item(int item)
{
if(is_exist(item) >= 0 || this->number >= 100) {
return false;
}
this->items[this->number] = item;
this->number++;
return true;
}首先判断数组中是否存在该元素,如果存在则不能再向集合中添加元素,直接返回false,如果不存在,则向数组中的number所指向的那个位置添加该元素,然后number作为数组元素个数的指示器+1,这样就完成了添加元素。
5.保护数组元素不被修改
写到这里,我们发现,数组元素个数指示器this->number,对于该问题的几个算法都起到了核心的作用,首先,我们依赖于数组元素个数指示器遍历数组,如果number值遭到修改,会导致无法遍历数组。举个例子来说,当我们调用下列语句以后:
Set set1;
set1.add_item(1);
set1.add_item(2);
set1.add_item(3);集合set1中的数组items变为[1,2,3],数组元素个数指示器number=3,此时,如果我们还想向集合set1中添加元素20,我们需要利用number=3这个指示器,让set1.items[number]=20,并且让number+1以指向下一个位置,即number=4。但是如果用户手动修改number值,比如set1.number=50;此时,我们的number就不再能指示数组元素的正确位置,从而导致以上所有算法所依赖的number失效,因此,我们需要对数组本身,以及数组元素个数指示器number进行私有化,以避免用户随意篡改。于是:
class Set
{
public:
//构造函数和析构函数
Set() {
this->number = 0;
memset(this->items,0,sizeof(items));
}
//初始化方法
int init(int items[], int num);
//添加元素
bool add_item(int item);
//删除元素
int remove_item(int item);
//求集合的并集
Set operator+ (Set set2);
//求集合的交集
Set operator* (Set set2);
//显示集合元素
int display();
//判断集合当中是否存在item,返回元素在集合中的位置,不存在返回-1
int is_exist(int item);
private:
int items[100]; //定义一个数组作为容器存放100个集合元素
int number; //定义数字i表示集合中元素的个数
};6. 从集合中移除元素
bool Set::remove_item(int item)
{
int pos = is_exist(item);
if(pos == -1) return false;
for(int i=pos; i< this->number-1; i++) {
this->items[i] = this->items[i+1];
}
this->number--;
return true;
}首先检查要移除的元素在结合中是否存在,如果不存在,则直接返回false;其次,定位到集合中元素的位置,然后从这个位置开始将集合中剩余的元素逐个前移,最后集合元素指示器-1,并返回true.
7. 求两个集合的交集
Set Set::operator* (Set set2)
{
Set result;
for(int i=0; i< this->number; i++) {
if(set2.is_exist(this->items[i]) >= 0) {
result.items[result.number] = this->items[i];
result.number++;
}
}
return result;
}算法很简单,遍历集合A中的元素,对于A中的每一个元素判断在集合B中是否存在,如果存在就加入到集合C当中,最后返回集合C
8. 求两个集合的并集
Set Set::operator+ (Set set2)
{
Set result;
for(int i=0; i<this->number; i++) {
result.items[result.number] = this->items[i];
result.number++;
}
for(int j=0; j<set2.number; j++) {
if(result.is_exist(set2.items[j]) == -1) {
result.items[result.number] = set2.items[j];
result.number++;
}
}
return result;
}首先遍历集合A,将集合A中的元素全部加到集合C当中,然后遍历集合B,对于B中的每一个元素,首先判断是否在A中存在,如果不存在则将其加入到集合C中,最终返回集合C。
-
33、C#:linq查本集合中不包含于另一个集合的元素
2017-08-13 17:05:15本文来自:http://www.cnblogs.com/TrueElement/archive/2012/01/13/2321328.html ...如上,我想把num0中不包含于num1的元素都找出来,其正确结果应该是28,32。早上看到原来linq本文来自:http://www.cnblogs.com/TrueElement/archive/2012/01/13/2321328.html
int[] num0 = { 28, 32, 14 };
int[] num1 = {14,15,16};如上,我想把num0中不包含于num1的元素都找出来,其正确结果应该是28,32。早上看到原来linq可以写多个from字句,之后就想到了这样的写法:
int[] num0 = { 28, 32, 14 };
int[] num1 = {14,15,16};
var qq = from n1 in num0
from n2 in num1
where n1 != n2
select n1;结果,我错了,调试了一下才知道自己想当然了。结果如下:
总共进行了3 * 3,9次比较,那个语句把所有成立的n1都选进去了。
所以还是老老实实用contains好了
int[] num0 = { 28, 32, 14 };
int[] num1 = { 14, 15, 16 };
var bb = from n1 in num0
where num1.Contains(n1) == false
select n1;另外,推荐一个工具:LinqPad,我的这个例子就是用linqPad 调试的,上面那个结果显示使用了语句:qq.Dump();
网址:http://www.linqpad.net/
下载:
for .net 3.5:http://www.linqpad.net/GetFile.aspx?LINQPad.exe
for .net 4.0:http://www.linqpad.net/GetFile.aspx?LINQPad4.zip
这个工具还不错,自带了许多例子,还可以写入自己的语句运行。另外,微软官方的Official Visual Studio 2008 C# Samples里面的LINQ - Sample Queries也是不错的,带了许多例子,几乎所有的linq特性都有,还可以执行。
网址:http://code.msdn.microsoft.com/csharpsamples
LINQ - Sample Queries 截图:
2012年1月13日16:56:23 更新:
后来又找到了Except、Intersect、Union、Distinct等方法,终于可以排除一个集合中那些某个属性的值存在于另一个几个中元素属性的方法了。
按照Example上的例子,大概可以如此实现:
public void Linq53() {
List<Product> products = GetProductList();
List<Customer> customers = GetCustomerList();
var productFirstChars =
from prod in products
select prod.ProductName[0];
var customerFirstChars =
from cust in customers
select cust.CompanyName[0];
var productOnlyFirstChars = productFirstChars.Except(customerFirstChars);
Console.WriteLine("First letters from Product names, but not from Customer names:");
foreach (var ch in productOnlyFirstChars) {
Console.WriteLine(ch);
}
}
-
Java中M个元素的集合每N个分成一组通用方案
2021-02-13 01:25:57一、背景平时业务开发可能有这样的一个场景:一个集合有M个元素,需要每N个元素一起处理。虽然这个功能非常简单,直接用for循环或者while可以写,其实可以封装成工具类,方便后续复用。二、源码/***将size为M的集合... -
判断两个集合中是否存在相同元素的4种常用方法(两个集合是否存在交集)
2022-05-28 20:52:20比较两个集合是否存在交集就可以...今天小名想分享给大家的是来自“万能的Collections”中的一个静态方法顾名思义,它是用来判断两个集合"不相交的”的结果,但我们只要对返回结果取反,就可以高效获得我们想要的结果。 -
从HashMap获取第一个和最后一个元素
2021-02-28 06:12:066 个答案:答案 0 :(得分:3)首先,地图不是有序的,所以你不会真正拥有第一个和最后一个元素。但是,如果你想获得它的第一个和最后一个元素,你可以只获取值并将其转换为数组。这不是很漂亮,但它会起作用。Map ... -
获取一个实体集合数据中某个元素(如ID)的集合
2020-10-13 10:33:20在获取数据中我们一般获取到一个集合,然后需要用for循环来取出需要的元素如id 这样比较麻烦,效率好像也低,然后找到一种新的方式,记一下 QueryWrapper<NameListStaff>queryWrapper1 = new QueryWrapper&... -
Java中如何取出Map集合中的元素
2021-02-12 23:20:18Java的Map集合中没有迭代器,需要将其转换为set集合/*...获取每一个键对应的值。 Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。2,Set> entrySet:将map集合中的映射关系存入到了set集合中, 而... -
JS将元素放到现有数组/集合的第一个位置
2022-03-28 15:24:14实例: 将新项添加到数组起始位置: var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.unshift("Lemon","Pineapple"); fruits 将输出: Lemon,Pineapple,Banana,Orange,Apple,Mango -
删除集合元素的几种方式与区别
2021-10-20 17:00:43删除集合元素有以下几种方式: remove(),pop(),discard(),clear() 集合的用法: 对于集合来讲有几种运算方法:交集、并集、差集、反交集、子集、超集 交集: 1,remove():可以指定删除的元素,如果指定的元素不... -
从Java LinkedList获取第一个和最后一个元素
2021-04-22 04:41:21可以分别使用方法java.util.LinkedList.getFirst()和java.util.LinkedList.getLast()获得链接列表的第一个和最后一个元素。这些方法都不要求任何参数。演示此程序如下示例importjava.util.LinkedList;... -
找出两个List集合重复的元素
2019-02-13 20:26:56前几天,有个同事问我说怎么找出两个List集合中重复的元素,我当时就说一个集合在外面循环,一个集合在内循环,如果两个元素相等了,就找出来了,我回来一想还是不对,要是数据非常多,这样循环下去,服务器会卡死的... -
【Java集合】判断两个数组或集合中的元素是否相等
2021-07-01 20:14:11今天刷题的时候,遇到了一个操作,即判断两个数组或集合中的元素是否相等。一下子忘记了要用哪个方法,于是乎直接写了一个for循环。后来才想起要用equals()这个方法,特此写一篇博文,加强一下记忆。 public class ... -
java8判断两个集合中是否有相同的元素
2019-12-03 17:59:51比如这样一个需求,现有一个Teacher对象集合和一个Student对象集合,需要查出两个集合中姓名相同的记录该怎么办呢,通常我们想到的肯定是用双层for循环来做,如果用java8新特性lambda表达式怎么做呢?废话不多说,... -
在C#中List集合使用First()方法获取第一个元素的操作
2021-03-03 21:08:15这篇文章主要介绍了在C#中List集合使用First()方法获取第一个元素的操作,具有很好的参考价值,希望对大家有所...例如有个List集合的对象list1,需要获取到该集合对象的第一个元素可使用First()方法,具体如下: List -
如何快速删除list中的最后一个元素?
2021-03-13 13:44:05(前言: 在项目中,在统计在线用户量及其行为方式的时候,想在项目如“/bob/recode/online”,结果发现...即:”/bob/report/online“.)再回到题目上来,删除list中的最后一个元素,看下面:可以使用lists:sublist(L,... -
把多个集合合成一个集合
2019-07-17 17:02:39通过集合对象AddRange方法可以把多个集合合成一个集合 转载于:https://www.cnblogs.com/13306511495/archive/2005/12/06/291532.html -
怎样获取list集合中的最后一个对象中的值
2021-02-12 18:17:08展开全部指令:list.get(list.size()-1);C语言中List的含义:链表是一种物理存储单元上非连续、非顺...链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分... -
C# list常用的几个操作 改变list中某个元素的值 替换某一段数据 删除集合中指定对象
2020-02-15 09:46:481、改变list中某个元素的值 public class tb_SensorRecordModel { public int ID { get; set; } public decimal Value1 { get; set; } } List<tb_SensorRecordModel> list = new... -
List集合一次删除多个元素
2018-12-18 10:58:26JAVA中循环遍历list有三种方式: for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。 1、for循环遍历list for(int i=0;i<list.size();i++){ if(list.get(i).equals("abc")) ... -
Java stream判断列表是否包含某几个元素/重复元素
2019-10-07 18:15:42(需求经过修改过)判断一个profile是否包含PROFILE-IN-A和PROFILE-IN-B且都是Enable=1打勾的. 既然已经JDK8了,那就用lambda吧,如果是foreach可能比较难处理,用stream的filter则可以这样做. 核心代码可以这么写 int ... -
Java判断一个数组是否有相同的元素
2019-10-27 22:11:111.如果只是需要判断是否包含相同元素而不需要找出相同元素是哪些,直接放在set集合中,然后看set集合和数组长度是否一致即可 import java.util.HashSet; import java.util.Set; public class Test { public ... -
Js 将元素放到现有数组/集合的第一个位置
2020-02-24 21:48:36主要是为了加深一下自己的印象: 实例 将新项添加到数组起始位置: var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.unshift("Lemon","Pineapple"); fruits 将输出: Lemon,Pineapple,Banana,... -
js中实现截取数组的前几个元素以及后几个元素作为一个新数组的方法
2022-04-21 16:42:20//截取数组前三个元素 const sliceA=arr.slice(0,3) console.log('sliceA',sliceA)//得到[1,2,3] //截取数组后三个元素 slice方法 const sliceArr=arr.slice(-3) console.log('sliceArr',sliceArr)//得到[6,7,8] /... -
Java面试题10(如何取到set集合的第一个元素)
2018-05-24 13:52:001.如何取到set集合的第一个元素。 public static void main(String[] args) { Set set = new HashSet(); set.add("xixi"); set.add("haha"); set.add(123); set.add(1.2); ... -
集合中某几个数字之和等于一个固定值 java
2019-06-12 13:21:05本代码有一处需要优化的地方 有大佬能帮忙优化就万分感谢了 暂时 此段代码 检索小集合没有问题 Integer[] inv2 = inv.clone(); reslist.add(inv2); 此处代码 有可能会导致 内存溢出 在此 如果代码上又和其他人冲突的... -
python 判断列表中每个元素有几个
2018-04-07 20:53:43使用标准库提供的collections基本用法:import collections lst = [] # lst存放所谓的100万个元素 d = collections.Counter(lst) # 瞬间出结果 for k in d: # k是lst中的每个元素 # d[k]是k在lst中出现的次数 ... -
删除集合中特定元素的几种情况
2019-01-23 15:44:35从集合中删除元素一直是一个比较容易遗漏的知识点,今天来给大家介绍一下删除集合中特定元素的一些情况。 (一)List如何实现遍历删除 以ArrayList为例 List<String> a1 = new ArrayList...