一.集合
集合说通俗点就是个容器,用于存储、提取、删除数据,它和数组的最大区别就是数组的个数是指定的、有限的,而集合的容量是无限的。
集合在java中实现的结构大致如下图所示,橘黄色的代表接口,浅蓝色的代表抽象类,深蓝色的代表普通类。
集合Collection拥有两大分支:List接口和Set接口,List接口的两个实现类是ArrayList和Vector,Set的两个实现类是TreeSet和HashSet。
下面讲述HashSet的常用方法。
二.HashSet集合的特点
HashSet集合的创建如下:
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
}
}
这里涉及到了HashSet集合创建的过程,我们按住Ctrl点击HashSet类,进入源代码会看到在HashSet构造方法中创建了一个HashMap对象存到了全局变量map中。
public HashSet() {
map = new HashMap<>();
}
1.HashSet中的元素不能重复
元素不能重复的原因在下面介绍方法的时候以add(String)方法为例分析。
2.HashSet中的元素的存储顺序
HashSet中的元素在存储时是无序的存储 ,在下面叙述Iterator()方法,对集合进行遍历时会在示例中证明。
三.常用方法
1.add(String)
该方法用于向List集合容器中添加元素,使用示例如下:
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Tom");
set.add("Jerry");
set.add("ABC");
}
}
我们以add(String e)为例着重说一下,按住Ctrl点击add方法进入源代码如下。
刚才我们进入HashSet源代码中时看到在HashSet构造方法中map变量里存储HashMap类对象,这时再分析下面的代码,调用map变量中HashMap的方法put赋值一个String类和一个常量,所以我们可以得到HashSet的其中一个特点就是和HashMap一样元素的值不能重复。
HashMap类集合见博客:HashMap中常用方法的总结
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
2.size()
该方法用于返回集合中有多少个元素,使用示例如下:
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Tom");
int length=set.size();
System.out.println(length);
}
}
3.remove(Object obj)
该方法用于删除指定元素,删除成功则返回true,没找到指定元素则返回false,使用示例如下:
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Tom");
set.add("Jim");
System.out.println(set.remove("Tom"));
System.out.println(set.remove("Lucy"));
System.out.println(set.size());
}
}
4.clear()
该方法用于清空list集合中所有元素,使用示例如下:
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Tom");
set.add("Jim");
System.out.println(set.size());
set.clear();
System.out.println(set.size());
}
}
5.isEmpty()
该方法用于判断集合容器是否没有元素,如果没有元素则返回true,使用示例如下:
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Tom");
set.add("Jim");
System.out.println(set.isEmpty());
set.clear();
System.out.println(set.isEmpty());
}
}
6.contains(Object o)
该方法用来判断list中是否包含该元素,如果有则返回true,使用示例如下:
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Tom");
set.add("Jim");
System.out.println(set.contains("Tom"));
set.remove("Tom");
System.out.println(set.contains("Tom"));
}
}
7.iterator()
该方法返回在此Set中的元素上进行迭代的迭代器,可以调用set变量中的方法iterator()方法对集合中的元素进行遍历,遍历时用到了Iterator类中的hasNext()方法和Next方法。其中,iterator.hasNext()方法的作用就是判断当前“指针”下面是否还有元素;iterator.next()方法的作用是,如果指针下面有元素,则移动指针并获取相应位置的元素,操作代码如下:
package set;
import java.util.HashSet;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Tom");
set.add("Jim");
set.add("Jerry");
Iterator<String> iterator=set.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
我们可以看到输出结果中并不是按赋值顺序,说明HashSet集合中元素的存储顺序是无序的。