堆栈 Stack:
表示一个先进后出的数据结构(用弹夹做一个例子,最先进的子弹最后被打出去)
压:push
弹:pop
package com.zking.Collection02.util; /** * 目标:使用LinkedList实现堆栈功能 * 特点:先进后出 * @author Administrator * */ import java.util.LinkedList; public class MyStack { //弹夹(LinkedList集合) private LinkedList lst = new LinkedList(); /** * 压栈(装弹) * @param obj */ public void push(Object obj) { lst.addFirst(obj); } /** * 出栈(开枪) * @return */ public Object pop() { Object first = lst.getFirst(); lst.removeFirst(); return first; } public int size() { return lst.size(); } public static void main(String[] args) { //初始化 MyStack stack = new MyStack(); //填充子弹 stack.push("a");//第一粒 4 stack.push("b");//第二粒 3 stack.push("c");//.... 2 stack.push("d");//第四粒 1 stack.push("e");//第五粒 0 while(stack.size()!=0) { Object val = stack.pop(); System.out.println(val); } } }
1. Set(用到了下面的HashSet类)
1.1 特点:无序、对象不能重复
1)无序:元素的添加顺序和输出顺序不一致
2)唯一:不允许添加重复元素过滤了(被过滤了)
问题:元素是被覆盖还是被过滤了?
package com.zking.Collection02.util; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import com.zking.Collection02.entity.Student; public class Demo1 { public static void main(String[] args) { //Set //1 特点:无序、对象不能重复 //1)无序:元素的添加顺序和输出顺序不一致 //2)唯一:不允许添加重复元素过滤了(被过滤了) //问题:元素是被覆盖还是被过滤了? /*Set<String> set = new HashSet<>(); set.add("zs"); set.add("ls"); set.add("ww"); set.forEach(System.out::println);*/ Set<Student> set = new HashSet<>(); set.add(new Student(1,"zs",100f)); set.add(new Student(2,"ls",32f)); set.add(new Student(3,"ww",33f)); set.add(new Student(1,"zs",100f)); //1)默认使用equals比较,Object类型是引用类型,默认比较的是内存地址 //2)重写hashcode和equals方法,先比较hashcode值是否相同,在比较equals //2.1)hashcode值相同,则比较equals //2.2)hashcode值不相同,则不比较equals /*Student stu = new Student(); stu.equals(null);*/ //set.forEach(System.out::println); } }
1.2 遍历
1.2.1 foreach
1.2.2 迭代器
//2.遍历 //1) foreach for (Student student : set) { System.out.println(student); } System.out.println("-----------------------------------------"); //2) iterator(迭代器) //获取迭代器 Iterator<Student> it = set.iterator(); //循环遍历 while(it.hasNext()) { System.out.println(it.next()); }
1.3 常用实现类
HashSet
TreeSet:根据某种(规则)对里面的元素进行排序
package com.zking.Collection02.util; import java.util.Set; import java.util.TreeSet; import com.zking.Collection02.entity.Student; public class Demo2 { public static void main(String[] args) { //TreeSet:以某种特定的规则对集合中的元素进行排序(升序和降序) //java.lang.Comparable:自然比较接口 //Java.lang.Comparator:比较器(推荐) /* Set<String> set1 = new TreeSet<>(); set1.add("zs"); set1.add("ls"); set1.add("ww");*/ Set<Student> set = new TreeSet<>(new NameComparator()); set.add(new Student(1,"zs",100f)); set.add(new Student(2,"ls",32f)); set.add(new Student(3,"ww",33f)); set.forEach(System.out::println); } }
自然比较接口: java.lang.Comparable
比较器: java.util.Comparator
String以AscII码进行比较,返回差值
LinkedHashSet:
1)元素是有顺序的
2)元素是不重复的
3)底层数据结构是按照链表的结构存储的 Linked