一. Set
1.1 特点:无序、对象不能重复
1.2 遍历
1.2.1 foreach
1.2.2 迭代器
1.3 常用实现类
HashSet
TreeSet:根据某种(规则)对里面的元素进行排序
自然比较接口: java.lang.Comparable
比较器: java.util.Comparator
String以AscII码进行比较,返回差值
package com.zking.collection_02.util;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.zking.collection_02.entity.Music;
public class Demo1 {
public static void main(String[] args) {
// Set集合
// 1.特点:无需.唯一
// 1)无序:元素添加的顺序与输出顺序不一致
// 2)唯一:不能添加重复元素
// Set<String> set=new HashSet<>();
// set.add("aa");
// set.add("bb");
// set.add("cc");
// set.add("aa");
// set.forEach(System.out::println);
// 过滤
Set<Music> set = new HashSet<>();
set.add(new Music(1, "美人鱼", "周杰伦1"));
set.add(new Music(2, "丑八怪", "薛之谦"));
set.add(new Music(3, "哪里都是你", "队长"));
set.add(new Music(1, "美人鱼", "周杰伦11"));
// 1) equals方法默认比较的是Object类型,而Object是引用类型
// 2) 重写equals方法,先比较hashcode的值,在比较equals
// 2.1) hashcode值相同,则比较equals
// 2.2) hashcode值不同,则不比较equals
// Music m=new Music();
// m.equals(null);
// set.forEach(System.out::println);
// 2.遍历方式
// 1.foreach
for (Music music : set) {
System.out.println(music);
}
// 2.迭代器iterator
// 获取迭代器
Iterator<Music> it = set.iterator();
if (it.hasNext()) {
System.out.println(it.next());
}
}
}
package com.zking.collection_02.util;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
import com.zking.collection_02.entity.Music;
public class Demo2 {
public static void main(String[] args) {
// TreeSet:按照某种特定的规则对集合的元素进行排序:升序.降序
// java.lang.Comparable:比较器
// 按字母升序排序
// Set<String> set=new TreeSet<>();
// set.add("zz");
// set.add("bb");
// set.add("cc");
Set<Music> set = new TreeSet<>(new MNameComparator());
set.add(new Music(3, "美人鱼", "周杰伦1"));
set.add(new Music(1, "丑八怪", "薛之谦"));
set.add(new Music(2, "哪里都是你", "队长"));
set.forEach(System.out::println);
}
}
package com.zking.collection_02.util;
import java.util.Comparator;
import com.zking.collection_02.entity.Music;
public class MNameComparator implements Comparator<Music> {
@Override
public int compare(Music m, Music mm) {
// 比较者大于被比较者 返回1
// 比较者等于被比较者 返回0
// 比较者小于被比较者 返回-1
// if(m.getMid() > mm.getMid()) {
// return 1;
// }else {
// if(m.getMid() == mm.getMid()) {
// return 0;
// }else {
// return -1;
// }
// }
return m.getMid().hashCode() - mm.getMid().hashCode();
}
}
二.案例
package com.zking.collection_02.util;
import java.util.LinkedList;
public class MyStack {
//使用LinkedList实现堆栈
private LinkedList list=new LinkedList();
/**
*
* @param o
*/
public void pusc(Object o) {
list.addFirst(o);
}
/**
* 出栈
* @return first
*/
public Object pop() {
//获取位于栈顶的元素
Object first = list.getFirst();
//删除位于栈顶的元素
list.removeFirst();
return first;
}
/**
* 实时计算堆栈的元素数量
* @return
*/
public int size() {
return list.size();
}
public static void main(String[] args) {
//初始化
MyStack stack=new MyStack();
//压栈
stack.pusc("1"); //第一例子弹 下标为4
stack.pusc("2"); //第二例子弹 下标为3
stack.pusc("3");
stack.pusc("4");
stack.pusc("5"); //第五例子弹 下标为0
//循环
while(stack.size() != 0) {
System.out.println(stack.pop());
}
}
}