集合Set下面有:HashSet TreeSet
hashSet:
1.集合内的元素顺序不确定,不是按照输入顺序来的
2.不允许添加重复元素.添加重复元素将会覆盖之前的元素
3,线程不同步,不安全.
TreeSet:
1.TreeSet集合是用来集合元素内部进行排序使用
2.线程不同步,
一些代码;
/**
*
*
- @author dch
*/
//HashSet
public class TestHashSet {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("男1");
set.add("女1");
set.add("你好");
set.add("加油");
set.add("女1");
//输出[女1, 你好, 男1, 加油];
//说明了set集合是不可以重复的,并且无序的.
//集合里面数据的个数
System.out.println(set.size());
System.out.println(set);
//清空所有元素
// set.clear();
//使用迭代器遍历Set集合
Iterator<String> setIt = set.iterator();
//while 里面是查找是不是有下一个元素
while(setIt.hasNext()){
System.out.print(setIt.next()+",");
}
System.out.println();
//foreach遍历
for (String s : set) {
System.out.print(s+",");
}
System.out.println();
//如何此set包含指定元素,则返回true
set.contains("男1");
System.out.println(set.contains("男1"));
}
}
/**
*
*
- @author dch
*/
//定义一个学生类
public class Student {
//姓名
private String name;
//学号
private int num;
//年龄
private int age;
//无参构造器
public Student(){
}
//有参构造器
public Student(String name,int num,int age){
this.name = name;
this.num = num;
this.age = age;
}
//设置GET/SET方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写toString方法
@Override
public String toString() {
return "Student [name=" + name + ", num=" + num + ", age=" + age + "]";
}
}
/**
*
*
- @author dch
*/
//HashSet
public class TestHashSet2 {
public static void main(String[] args) {
Set set = new HashSet();
Student stu1 = new Student("杜", 1001, 22);
Student stu2 = new Student("李", 1002, 21);
Student stu3 = new Student("赵", 1021, 21);
Student stu4 = new Student("王", 1004, 23);
set.add(stu1);
set.add(stu2);
set.add(stu3);
set.add(stu4);
//foreach
/* for (Object obj : set) {
System.out.println(obj);
}*/
//使用迭代器遍历Set集合
Iterator setIt = set.iterator();
while(setIt.hasNext()){
System.out.println(setIt.next());
}
}
}
TreeSet:
我们在对对象进行比较大小的时候,并不是真的在比较对象,而是在比较对象里面的某些可以比较的属性,例如在Student对象中我们比较的就是学生的ID,因为每个学生对应一个ID,所以可以通过比较ID来比较对象.
/**
*
- @author dch
*/
//TreeSet集合
//用来集合元素内部进行排序的使用的,
public class TestTreeSet {
public static void main(String[] args) {
//TreeSet 是一个可以排序的set集合
TreeSet set = new TreeSet();
//添加元素
set.add("hello");
set.add("123");
set.add("ff");
set.add("你好");
//元素的个数
System.out.println(set.size());
//foreach遍历
for (Object obj : set) {
System.out.print(obj+"--");
//输出123--ff--hello--你好--,会默认排序
}
System.out.println();
//返回此集合中最小元素大于或等于给定元素,
//如果没有此元素,则返回 null
//System.out.println(set.ceiling(""));
//排序,1.对普通数据的自定义排序
// 2.必须指定,存储的数据是同一类,或者子类
TreeSet set2 = new TreeSet(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1.compareTo(o2)>0){
return -1;
}else if(o1.compareTo(o2)<0){
return 1;
}
return 0;
//return o1.compareTo(o2);
// 排序规则 0 : 都相等 1: 前者>后者
}
});
set2.add("abc");
set2.add("abcd");
set2.add("bcd");
set2.add("abf");
System.out.println("set2的元素个数"+set2.size());
for (Object obj : set2) {
System.out.print(obj+"--");
}
TreeSet set3 = new TreeSet(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if(o1>o2){
return 1;
}else if(o1<o2){
return -1;
}
return 0;
//return o1.compareTo(o2);
// 排序规则 0 : 都相等 1: 前者>后者
}
});
set3.add(123);
set3.add(129);
set3.add(120);
System.out.println("set3的元素个数"+set3.size());
for (Object obj : set3) {
System.out.print(obj+"--");
}
System.out.println();
//存储对象
TreeSet set4 = new TreeSet(new Comparator<Student>() {
// 两个对象能比较大小吗 》不能,只能比较对象的属性 ,
//比如这里比较的是Student的学号的大小,因为一个学生对应一个学号
@Override
public int compare(Student o1, Student o2) {
if(o1.getNum()>o2.getNum()){
return 1;
}else if(o1.getNum()<o2.getNum()){
return -1;
}
// TODO Auto-generated method stub
return 0;
}
});
set4.add(new Student("杜", 1002, 22));
set4.add(new Student("赵", 1009, 21));
set4.add(new Student("李", 1005, 23));
set4.add(new Student("王", 1008, 24));
for(Object obj : set4){
System.out.println((Student)obj);
}
}
}