文档章节

对java中Set是一个不包括重复元素的集合的理解

wenwen1
 wenwen1
发布于 2013/04/02 14:03
字数 733
阅读 323
收藏 0

    在Java中使用Set,可以方便地将需要的类型以集合类型保存在一个变量中.主要应用在显示列表.Set是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。对此我刚开始对此没有很深刻的认识,自从前几天我被我自己写的一段程序搞得烦躁的很,我才明白Set的不包括重复元素的机制。

String pname="工作周报";
 Set<User> users=userDAO.findUserByEnabled(true);
List<Project> list3 = new ArrayList<Project>();
Calendar time=Calendar.getInstance();
Calendar date=Calendar.getInstance();
 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
 String sDate=sdf.format(date.getTime());
 String strDate=sDate.substring(8, 10);
  int days=Integer.parseInt(strDate);
int month =time.get(Calendar.MONTH);

 int year=time.get(Calendar.YEAR);

int year=time.get(Calendar.YEAR);
for(int i=days;i>0;i--){
List<User> list2 = new ArrayList<User>();
list2.addAll(users);
Project project2=new Project();
project2.setCreateDate(Calendar.getInstance());
project2.getCreateDate().set(year, month, i, 0, 0, 0);
Calendar atime=project2.getCreateDate();
Set<Activity> acts=project2.getActivities();
Set<Task> tasks=project2.getTasks();
Set<ProjectFinance>  finances=project2.getProjectFinances();
Set<Activity> activitys=activityDAO.findActivityByActivityTime(atime);
for(Activity activity:activitys)
{
if(!activity.getProject().getProjectName().equals(pname)){
 
Calendar actTime=activity.getActivityTime();
Calendar created=activity.getCreatedDate();
Calendar activityTime=Calendar.getInstance();
int actWeek=actTime.get(Calendar.DAY_OF_WEEK);
if(actWeek<5){
activityTime.set(year,month, i+1, 11, 0, 0);

}else{
    activityTime.set(year,month, i+3, 11, 0, 0);
}
int biJiao=activityTime.compareTo(created);
if(biJiao==1){
acts.add(activity);
list2.remove(activity.getUserByCreater());
}else{
Task task =new Task();
task.setUserByCreater(activity.getUserByCreater());
tasks.add(task);
list2.remove(activity.getUserByCreater());
}
}
}
for(User user:list2)

ProjectFinance finance=new ProjectFinance();
finance.setUserByCreater(user);
finances.add(finance);
}
list3.add(project2);
}  
return list3;
      当时我觉得在循环user时每次都循环一个新的ProjectFinance,然后再给finance的创建人赋值,而且每次的值都不一样,这样应该每次set进去的对象应该不一样,然后finances集合中应该有很多值,但是让我很不解的是每次运行这段程序的时候,finances集合总是只有一个对象,就是第一个。这个问题困扰了我很久,然后有一天我和我同事讨论的时候,我突然之间想起先给每一个ProjectFinance对象set一个Id;然后再把这个对象set到finances的Set集合中去试试,结果没想到问题就这样解决了。

  这时,我才明白Set是一个不包括重复元素的Collection的真正意义。对于Set中变量是字符串或数字时,例如

 Set  set=new HashSet();
   set.add("abc");
   set.add("cde");此时只要字符串不相同就可以增加进去。

但是如果Set中的变量一个对象,比如该对象包括id、userName、password、cname等字段,并且是以id作为主键时,Set这样的对象时,set只要检查id这个主键的值是否是一样的,如果是一样的,它只会set第一个。这就是我的程序中finances中为什么总是只有一个值得原因:就是我没有设置每个新的ProjectFinance的id的值。

© 著作权归作者所有

wenwen1
粉丝 1
博文 26
码字总数 9049
作品 0
徐汇
私信 提问
再谈Java数据结构—分析底层实现与应用注意事项

在回顾js数据结构,写《再谈js对象数据结构底层实现原理-object array map set》系列的时候,在来整理下java的数据结构。 java把内存分两种:一种是栈内存,另一种是堆内存 基本类型在栈区分...

zhoulujun
05/17
47
0
【Scala】Scala中的函数式编程及集合操作

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/gongxifacai_believe/article/details/81988990 1、Scala中的函数式编程简介 Scala中的函数是Java中完全没有的概念。...

魏晓蕾
2018/08/23
0
0
Google Guava Collections 使用介绍

Google Guava Collections(以下都简称为 Guava Collections)是 Java Collections Framework 的增强和扩展。每个 Java 开发者都会在工作中使用各种数据结构,很多情况下 Java Collections F...

毒性逆转
2011/11/17
399
1
08《Java核心技术》之Vector、ArrayList、LinkedList有何区别?

一、提出问题 我们在日常的工作中,能够高效地管理和操作数据是非常重要的。由于每个编程语言支持的数据结构不尽相同,比如我们最早接触到的 C 语言,需要自己实现很多基础数据结构,管理和操...

飞鱼说编程
2018/10/11
33
0
Vector、ArrayList、LinkedList

我们在日常工作中,能够高效地管理和操作数据是非常重要的。由于每个编程语言支持的数据结构不尽相同,比如我最早学习的C语言,需要自己实现很多基础数据结构,管理和操作会比较麻烦。相比之...

琚建飞
03/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

shangcheng-my

1.数据库主键、外键类型为bigint,那么在后台应该用什么类型的变量定义? 后台用string接收,因为前段传过来的一般都是json字符串,后台直接接收,mysql是可以吧数字类型的字符串转换为对应的...

榴莲黑芝麻糊
昨天
4
0
微服务架构依赖图

基于spring-cloud-alibaba + dubbo

龙影
昨天
5
0
Centos7 安装zabbix-agent

rpm -i https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-release-4.2-2.el6.noarch.rpm 可以到https://repo.zabbix.com/zabbix找到对应的版本 yum install zabbix-agent -y 出现E......

abowu
昨天
8
0
文本编辑器GNU nano 4.4 发布

GNU nano 4.4 "Hagelslag" 更新日志: 启动时,光标可以放在第一个或最后一个出现位置 字符串前面带有+/string 或 +?string的字符串。 发生自动硬包装时((--breaklonglines),任何前导引号...

linuxCool
昨天
7
0
你知道字节序吗

字节序 最近在调一个自定义报文的接口时,本来以为挺简单的,发现踩了好几个坑,其中一个比较“刻骨铭心”的问题就是数据的字节序问题。 背景 自定义报文,调用接口,服务端报文解析失败 iO...

杭城小刘
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部