//JAVA集合,是用于存放对象的容器,只能存放对象(基本数据类型也会被转换为对象),不限数量 //集合可分为Set,List,Map三大类 //Set:无序,不可重复的 //List:有序,可重复的 //Map:具有映射关系的集合 //JDK5之后增加了泛型,可以记住容器中对象的数据类型
//HashSet是Set接口的典型实现,按Hash算法来存储元素 //不能保证排列顺序,不可重复(hashCode不相等),不是线程安全的,集合元素可以是null
在使用之前当然是要导入包啦,Set和HashSet均存在于java.util下
import java.util.HashSet;
import java.util.Set;
Set set = new HashSet();
Set
这里使用了一个泛型
但若指明是其他数据类型,则这个集合只能存放那个类型的对象,例如:
Set strSet = new HashSet();
创建好一个HashSet集合对象后就可以向其中加入元素了
set.add(58); //Integer型
set.add("nbsw"); //String型
set.add(null); //null
set.add(true); //Boolean型
存入元素时,调用对象的hashCode()方法来获得对象的hashCode值,据此决定对象在HashSet中的存储位置,因此排列无序
加入的对象不能够重复,即两元素的HashCode不能一样,否则将报错
set.remove(58);
if( set.contains("58") ) { //判断是否存在
System.out.println("存在58");
} else {
System.out.println("不存在58");
}
contains()方法返回的是一个bollean值,据此判断是否存在
System.out.println(set.size());
遍历集合有两种方法,迭代器遍历和for each遍历
1.迭代器遍历:
Iterator it = set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
这种方法需要用到类Iterator,需要导入java.util下的包
import java.util.Iterator;
2.for each迭代遍历:
for(Object obj : set) {
System.out.println(obj);
}
这种做法是把set的每一个值取出来,赋值给obj,直到循环set的所有值
比较简便,不用额外再导入包,也是使用比较多的方法
set.clear();
移出集合中的全部元素,此集合变为一个空集合
Set接口的另一种实现,相对于HashSet,TreeSet会使用自然排序或是定制排序,默认为自然排序
import java.util.Set;
import java.util.TreeSet;
Set set = new TreeSet();
因为多了一个排序操作,需放入同样类型的对象(使用泛型来限制),否可能会出现异常
set.add(4);
set.add(2);
set.add(7);
set.add(3);
System.out.println(set);
这里我们直接打印一下
发现原本加入时并没有顺序,进入集合会自动给元素自然排序
还有一种是可以按照某种类中的比较方法来进行排序,也就是定制排序
比如现在有一个Person类如下:
class Person implements Comparator { //继承Comparator接口
int age;
String name;
public Person() { //无参构造
}
public Person(String name,int age) { //有参构造
this.name = name;
this.age = age;
}
@Override
public int compare(Person o1,Person o2) { //实现Comparator的比较方法,定制排序
if(o1.age > o2.age)
return 1;
else if(o1.age < o2.age)
return -1;
return 0;
}
}
由于这里我们重写了Comparator的比较方法,我们需要导入包Comparator:
import java.util.Comparator;
再创建一个Person类的TreeSet集合,向其中加入Person的对象,再遍历:
Set perSet = new TreeSet(new Person());
Person p1 = new Person("张三",18);
Person p2 = new Person("李四",25);
Person p3 = new Person("王二买",17);
Person p4 = new Person("刘武",23);
perSet.add(p1);
perSet.add(p2);
perSet.add(p3);
perSet.add(p4);
for(Person p : perSet) { //迭代器遍历集合元素
System.out.println("name:" + p.name + " age:" + p.age);
}
便能按照我们在Person类中写的比较方法来对加入的Person对象进行排序了
这就是TreeSet的定制排序
后续还有List和Map集合,下篇再写...