一、Set中常被用的抽象方法 add, clear,remove, size
二、HashSet、TreeSet是Set的两个实现类, 两个类的方法相同,但是方法运行后结果有的不同
三、HashSet 对比TreeSet
1.相同点:
(1)没有下标(区别于LIst)
(2)不可手动排序(区别于LIst),
(3)元素顺序与加入顺序无关(区别于LIst)
(4)同一个元素不可加入多次,加入第二次无效,不会报错(区别于LIst)
(5)遍历方式相同
2.区别:
(1)HashSet:元素顺序不可测, 与数学上元素集合概念相同
(2)TreeSet:元素顺序与元素的排序规则有关 ,
(3)HashSet对元素无要求,而TreeSet对元素有要求,即要求元素必须有排序规则。(区别于List)
(4)HashSet:底层是算法是Hash算法:所以查询速度快,但是没有ArrayList快
TreeSet: 底层算法是树: 查询慢,插入快些。
四.遍历Set有两个方式
(1)foreach
(2)iterator
例1: HashSet
package com.test;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetTest {
// HashSet
public void m1() {
Set<String> set = new HashSet<String>();
set.add("cc");
set.add("aa");
set.add("dd");
set.add("bb");
set.add("dd");
for (String string : set) {
System.out.println(string);
}
Iterator<String> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
//长度
System.out.println(set.size());
}
// HashSet
public void m2() {
Set<Stu> set = new HashSet<Stu>();
Stu stu = new Stu("上明",100);
set.add(stu);
set.add(stu);
set.add(new Stu("小明", 200));
set.add(new Stu("大明", 300));
System.out.println(set.size());//3
for (Stu s : set) {
System.out.println(s);
}
}
public void m3() {
Set<Person> set = new HashSet<Person>();
set.add(new Person("小明", 200));
set.add(new Person("大明", 300));
System.out.println(set.size());//3
for (Person s : set) {
System.out.println(s);
}
}
public static void main(String[] args) {
SetTest t = new SetTest();
t.m3();
}
}
四、集合的遍历:
1.List
(1)根据下标for循环
(2)Iterator
(3)foreach
2.Set
(1)Iterator
(2)foreach
3.Map
(1)Iterator
(2)foreach
public class Test {
// 遍历List
private void m1() {
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bb");
list.add("cc");
System.out.println("根据下标for循环");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("Iterator");
Iterator<String> it = list.iterator();
while(it.hasNext()) {//关断下面是否有
String s = it.next();//下移并取出
System.out.println(s);
}
System.out.println("foreach");
for (String xx : list) {
System.out.println(xx);
}
}
// 遍历Set
private void m2() {
Set<String> set = new HashSet<String>();
set.add("aaa");
set.add("bb");
set.add("cc");
System.out.println("Iterator");
Iterator<String> it = set.iterator();
while(it.hasNext()) {//关断下面是否有
String s = it.next();//下移并取出
System.out.println(s);
}
System.out.println("foreach");
for (String xx : set) {
System.out.println(xx);
}
}
public void m3() {
Map<String, Integer> map = new TreeMap<String, Integer>();
map.put("aa", 11);
map.put("cc", 33);
map.put("bb", 22);
System.out.println("Iterator");
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while(it.hasNext()) {
String key = it.next();
int value = map.get(key);
System.out.println(key +" "+ value);
}
}
public void m4() {
Map<String, Integer> map = new TreeMap<String, Integer>();
map.put("aa", 11);
map.put("cc", 33);
map.put("bb", 22);
System.out.println("foreach");
Set<String> set = map.keySet();
for (String key : set) {
int value = map.get(key);
System.out.println(key+" "+value);
}
}
public static void main(String[] args) {
new Test().m4();
}
}