集合框架二(Set接口)
2016-07-19 18:45
260 查看
package us.google.com;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “]”;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
package us.google.com;
public class Student {
private String name;
}
package us.google.com;
public class Empl implements Comparable{
private String name;
private int age;
}
package us.google.com;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
/**
* Set接口
* 1、不允许重复元素
* @author chongrubujing
*
*/
public class SetDemo {
/**
* HashSet实现类
* 1、不保证迭代顺序
* 2、底层使用HashMap实现(哈希表)
* 3、自定义对象是否重复的判断条件是:先判断hashCode是否相等,如果hashCode不相等,那么一定不是同一个对象
* 如果hashCode相等,那么久需要equals方法进一步判断,如果equals返回true则为同一个对象。否则不是
* 同一个对象。
*/
public static void hashset()
{
//创建一个HashSet对象
Set set = new HashSet();
set.add(“空空”);
set.add(“兰兰”);
set.add(“爱爱”);
set.add(“苍苍”);
System.out.println(“元素的个数是:”+set.size());
//把集合转换成数组(匿名对象注意别忘了{})
String[] names = set.toArray(new String[]{});
for (String s: names) {
System.out.println(s);
}
System.out.println(“—————————”);
//存储自定义对象
//创建HashSet对象
Set persons = new HashSet();
persons.add(new Person(“空空”,18));
persons.add(new Person(“兰兰”,18));
persons.add(new Person(“爱爱”,18));
persons.add(new Person(“苍苍”,18));
persons.add(new Person(“空空”,30));
System.out.println(“元素一共有:”+persons.size());
}
}
public class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “]”;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
package us.google.com;
public class Student {
private String name;
public Student(String name) { super(); this.name = name; } private int age; public Student() { super(); // TODO Auto-generated constructor stub } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; }
}
package us.google.com;
public class Empl implements Comparable{
private String name;
private int age;
public Empl(String name, int age) { super(); this.name = name; this.age = age; } public Empl() { super(); // TODO Auto-generated constructor stub } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Empl [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Empl o) { if(o==null) { throw new NullPointerException("参数不能为空"); } if (this.age>o.age) { return 1; } if(this.age<o.age) { return -1; } return 0; }
}
package us.google.com;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
/**
* Set接口
* 1、不允许重复元素
* @author chongrubujing
*
*/
public class SetDemo {
/**
* HashSet实现类
* 1、不保证迭代顺序
* 2、底层使用HashMap实现(哈希表)
* 3、自定义对象是否重复的判断条件是:先判断hashCode是否相等,如果hashCode不相等,那么一定不是同一个对象
* 如果hashCode相等,那么久需要equals方法进一步判断,如果equals返回true则为同一个对象。否则不是
* 同一个对象。
*/
public static void hashset()
{
//创建一个HashSet对象
Set set = new HashSet();
set.add(“空空”);
set.add(“兰兰”);
set.add(“爱爱”);
set.add(“苍苍”);
System.out.println(“元素的个数是:”+set.size());
//把集合转换成数组(匿名对象注意别忘了{})
String[] names = set.toArray(new String[]{});
for (String s: names) {
System.out.println(s);
}
System.out.println(“—————————”);
//存储自定义对象
//创建HashSet对象
Set persons = new HashSet();
persons.add(new Person(“空空”,18));
persons.add(new Person(“兰兰”,18));
persons.add(new Person(“爱爱”,18));
persons.add(new Person(“苍苍”,18));
persons.add(new Person(“空空”,30));
System.out.println(“元素一共有:”+persons.size());
}
/** * TreeSet实现类 * 1、使用元素的自然顺序对元素进行排序 * 2、底层使用TreeMap实现(树形结构) * 3、在TreeSet集合中,存储自定义对象时,该对象必须实现Comparable/Comparator接口 */ public static void treeset() { Set<String> set = new TreeSet<String>(); set.add("空空"); set.add("兰兰"); set.add("苍苍"); set.add("爱爱"); System.out.println("元素个数:"+set.size()); String[] names = set.toArray(new String[]{}); for (String s : names) { System.out.println(s); } System.out.println("添加自定义对象"); Set<Empl> set1 = new TreeSet<Empl>(); set1.add(new Empl("空空",30)); set1.add(new Empl("兰兰",31)); set1.add(new Empl("苍苍",32)); set1.add(new Empl("爱爱",33)); set1.add(new Empl("利亚",28)); System.out.println("个数为:"+set1.size()); } /** * LinkedHashSet类 * 1、使用哈希表+双向链表实现 * 2、会以插入的顺序输出 * 3、底层是使用LinkedHashMap实现 * 4、是HashSet的子类 */ public static void linkedhashset() { Set<Student> set2 = new LinkedHashSet<Student>(); Student s1 = new Student("小白"); Student s2 = new Student("小黑"); Student s3 = new Student("小红"); Student s4 = new Student("小蓝"); set2.add(s1); set2.add(s2); set2.add(s3); set2.add(s4); set2.add(new Student("小绿")); System.out.println(set2); } public static void main(String[] args) { hashset(); treeset(); linkedhashset(); }
}
相关文章推荐
- 横线中间添加文字
- 文件FTP上传支持断点续传demo
- 三消游戏解析(一)
- STM32中的位带(bit-band)操作
- 为什么Android的图片质量会比iPhone的差?
- c++指针详解
- C++ 语法 : volatile关键字详解
- HTML5存储
- POJ2105【进制转化】
- UIScrollView
- logback和slf4j的使用chapter3
- WPF中控制窗口显示位置的三种方式
- 正则表达式学习笔记
- C++ string 详解
- markdown编辑器练习
- 深入理解类的加载机制及反射
- bzoj 3790: 神奇项链
- c++——将数组中重复的数剔除
- 量子力学初识
- jedis学习笔记【2】——连接池