集合第二节
来源:互联网 发布:朴槿惠 邪教 知乎 编辑:程序博客网 时间:2024/06/07 05:58
v 上节课补充:
ArrayList和Vector比较:
ArrayList与Vector的内部实现类似,Vector设计为线程安全的,为了保证线程安全,Vector在性能方面稍逊于ArrayList,目前我们的编写都是在单线程应用程序,应选择使用ArrayList.
v Set集合:
Set集合和List集合的很多用法是相同的,但是Set集合中的元素是无序的,元素也是不能重复的,Set集合中常用的类有HashSet和TreeSet.
HashSet中常用的方法有:
返回类型
方法名称
作用
boolean
add(Object o)
添加元素
void
clear()
移除Set集合中的所有元素
boolean
contains(Object o)
判断集合中是否存在指定元素
boolean
isEmpty()
判断集合是否为空
Iterator
iterator()
返回Set集合中对元素迭代的迭代器
boolean
remove(Object o)
从集合中删除元素
int
size()
返回集合中的元素数量
HashSet存放规律:Set中的数据是无序的,并不可重复,可以存放null。
在存放数据的时候是根据对象的hashcode码进行存放的当两个对象的hashCode值相等的时候,还要去比较两个对象的equals方法是否相等,如果equals方法返回true,那么代表两个对象是同一个,不能添加进去,否则代表两个对象不是同一个对象,该对象可以添加进去。
注意:Set集合中存放数据时,要尽量避免经常发生hashCode相同的冲突,这会降低程序的性能,所以要在存放的对象的类中重写hashCode()方法,用来保证hashCode是唯一的。
例如:
Set set=new hashSet(); 创建一个set集合
boolean boo1=set.add("4");
System.out.println(boo1);
添加了重复的元素,所以没有添加成功,返回false
boolean boo2=set.add("4");
System.out.println(boo2);
booleanboo3=set.add("a");
System.out.println(boo3);
booleanboo4=set.add("u");
System.out.println(boo4);
set.add(newStudent(1, "张三", 18)); 添加对象
set.add(new Student(1, "张三", 18));
System.out.println(set.size()); 获取长度
Student类:
publicclass Student{
private intid;
private Stringname;
private intage;
public int getId() {
returnid;
}
publicv oid setId(intid) {
this.id = id;
}
public String getName() {
returnname;
}
publicv oid setName(Stringname) {
this.name = name;
}
publicint getAge() {
returnage;
}
publicv oid setAge(intage) {
this.age = age;
}
public Student(intid, Stringname,intage) {
super();
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return"Student [id=" + id +",name=" +name +", age=" +age +"]";
}
@Override
重写equals();方法
public boolean equals(Objectobj) {
System.out.println("equals被执行了");
//1.判断obj是否为空
if(obj==null){
return false;
}
//2.判断是否属于同一类型
if(!(objinstanceof Student)){
return false;
}
//3.判断内容是否一样
Student stu=(Student)obj; //强制转换
if(stu.getAge()==age&&stu.getName().equals(name)&&stu.getId()==id){
return true;
}
returnfalse;
}
@Override
publicint hashCode() {
System.out.println("hashCode被执行了");
// TODO Auto-generated method stub
return name.hashCode()+age+id;
}
}
说明:1程序的执行结果set集合的长度为4,因为去除了重复的数据。
2.存放对象的时候先去比较hashCode值,如果hashCode值相等再去比较equels要保证两个重复的对象不会添加到set集合中,必须要hashCode()方法。
注意:
当两个对象的hashCode相等的时候,equals不一定相等,
如果两个对象的equals相等,那么他们的hashCode肯定相等。
- 集合第二节
- 第二周Map集合
- SVN第二篇-----命令集合
- 更新第二篇 集合框架
- 集合第二发Set接口
- 集合小例子:第二集
- 编程之美初赛第二场 集合
- 编程之美初赛第二场 集合
- 编程之美初赛第二场 集合
- 第二部分 集合论 第六章 集合代数
- UI第二十一天:集合视图
- SICP_Python版第二章:集合的表示
- 集合的操作(员工类 第二篇)
- 集合第二步: 模拟LinkedList底层实现
- 集合入门介绍第二章——List集合
- 集合【第二篇 不同集合的讨论和注意要点】
- 第二章 --- 第二节
- 【第二章 第二节】
- mui:使用js在移动端进行精准定位改进版,以及坐标转换
- C++ 图论-深度与广度遍历
- javaWeb--分页查询
- 【Hibernate】二级缓存(Hibernate默认使用的二级缓存)
- Windows下如何安装Docker
- 集合第二节
- 梦之旅
- 【bzoj1579】[Usaco2009 Feb]Revamping Trails 道路升级
- java事件处理机制(自定义事件)
- SublimeText3常用插件及快捷键总结
- Leetcode-- Longest Substring Without Repeating Characters
- 如何在一台电脑上同时启动多个tomcat
- 洛谷P1531 I Hate It(线段树)
- 628. Maximum Product of Three Numbers