这次我主要说的是关于Set[集合]、Map[键值对]。
1、Set【集合】
Java中的Set正好和数学上直观得集合[Set]的概念是相同。Set最大的特性就是不允许在其中存放的元素是重复的。根据这个特点,我们就可以使用Set这个接口来实现像商品种类的存储需求。Set可以被用来过滤在其他容器中存放的元素,从而得到一个没有包含重复新的集合。
在这里主要说的是HashSet与TreeHash的基础使用。
1)、HashSet:无序且是不重复的
import java.util.HashSet; import java.util.Iterator; public class HashSetText { public static void main(String[] args) { //创建集合,泛型可以是一个自定义对象,也可以是Java内置对象 HashSet<String> ha = new HashSet<String>(); //添加数据 ha.add("BBB"); ha.add("DDD"); ha.add("AAA"); ha.add("CCC"); //添加与之前的重复,则不添加进去 ha.add("AAA"); //取出方式一:迭代器 //将集合中的数据放入迭代器中遍历 Iterator<String> iter=ha.iterator(); //如果迭代器iter中没有元素就会返回false,就会跳出循环 while(iter.hasNext()){ //利用next方法逐个取得数据,并输出 System.out.println(iter.next()); } System.out.println("-----------------"); //取出方式二:增强for //定义一个与集合中的数据类型相同的变量,用于临时存储数据, //该循环的实质:会跳到方式一,用方式一的方法输出 for(String s:ha){ //直接输出 System.out.println(s); } } }
以下是HashSet的方法摘要:
2)、TreeSet:有序且不重复
顺序可以是系统默认的自然顺序,也可以在泛型为自定义的对象是重写
自定义的一个person类
public class person implements Comparable<person> { private String name; private int age; /** * 构造方法 * @param name 姓名 * @param age 年龄 */ public person(String name,int age){ this.name=name; this.age=age; } /** * 重写了输出方法 */ @Override public String toString() { return name + ":" + age ; } /** * 重写了比较器 */ @Override public int compareTo(person p) { //根据姓名排序 return this.age-p.age; //根据姓名排序 //return this.name.compareTo(p.name); } }
主函数:
import java.util.Iterator; import java.util.TreeSet; public class TreeSetText { public static void main(String[] args) { //创建集合,泛型可以是一个自定义对象,也可以是Java内置对象 //这里是自定义对象,鉴于TreeSet的特性,可以重写比较器或者采用默认自然顺序排序 TreeSet<person> ha = new TreeSet<person>(); //添加数据 ha.add(new person("BBB",22)); ha.add(new person("DDD",30)); ha.add(new person("AAA",20)); ha.add(new person("CCC",21)); //由于与之前的对象不是完全相同,故可以添加 ha.add(new person("AAA",19)); //由于与之前的对象是完全相同的,故不能添加 ha.add(new person("AAA",20)); //取出方式一:迭代器 //将集合中的数据放入迭代器中遍历 Iterator<person> iter=ha.iterator(); //如果迭代器iter中没有元素就会返回false,就会跳出循环 while(iter.hasNext()){ //利用next方法逐个取得数据,并输出 System.out.println(iter.next()); } System.out.println("-----------------"); //取出方式二:增强for //定义一个与集合中的数据类型相同的变量,用于临时存储数据, //该循环的实质:会跳到方式一,用方式一的方法输出 for(person s:ha){ //直接输出 System.out.println(s); } } }
以下是TreeSet的方法摘要:
以上需要注意的是HashSet适合不重复且没有顺序的数据。
TreeSet适合不重复且有顺序的数据