(集合五)Set接口、Queue接口、Deque接口、Stack栈结构示例

Set接口:与List接口方法相似,当添加元素为重复元素时,那么此元素将不会被添加进集合,Set集合无序,可添加null。

例一:

                           package com.hyxy;
                           import java.util.HashSet;
                           import java.util.Set;
                           public class TestSet1 {
                               public static void main(String[] args) {
                                   Set<String> set=new HashSet<String>();
                                   set.add("A");
                                   set.add("B");
                                   set.add("C");
                                   System.out.println(set);//运行结果:[A, B, C]
                                   set.add("AB");
                                   System.out.println(set);//运行结果:[A, AB, B, C]
                                   //证明重复
                                   set.add("A");
                                   System.out.println(set);//运行结果:[A, AB, B, C]
                                   set.add(null);
                                   System.out.println(set);//运行结果:[null, A, AB, B, C]
                                   System.out.println(set.contains("AB"));//运行结果:true
                               }
                           }

例二:自定义类Student,自动生成有无参构造方法,属性set、get方法,toString方法,hashCode、equals方法。当向HashSet集合中存入元素时,HashSet会调用该对象的hashCode方法来得到该对象的hashCode值,然后滚局hashCode值决定该对象在HashSet中的存储位置。如果两个元素的equals方法返回true,但hashCode返回值不相等,hashSet将会把他们存储在不同的位置,但依然可以添加成功。

                           public class Student {
                               private String strID;
                               private int age;
                               private String grade;
                               private String name;
                               public Student() {}
                               public Student(String strID, int age, String grade, String name) {
                                   this.strID = strID;
                                   this.age = age;
                                   this.grade = grade;
                                   this.name = name;
                               }
                               public String getStrID() {
                                   return strID;
                               }
                               public void setStrID(String strID) {
                                   this.strID = strID;
                               }
                               public int getAge() {
                                   return age;
                               }
                               public void setAge(int age) {
                                   this.age = age;
                               }
                               public String getGrade() {
                                   return grade;
                               }
                               public void setGrade(String grade) {
                                   this.grade = grade;
                               }
                               public String getName() {
                                   return name;
                               }
                               public void setName(String name) {
                                   this.name = name;
                               }
                               public String toString() {
                                   return "Student [strID=" + strID + ", age=" + age + ", grade=" + grade + ", name=" + name + "]";
                               }
                               public int hashCode() {
                                   final int prime = 31;
                                   int result = 1;
                                   result = prime * result + age;
                                   result = prime * result + ((grade == null) ? 0 : grade.hashCode());
                                   result = prime * result + ((name == null) ? 0 : name.hashCode());
                                   result = prime * result + ((strID == null) ? 0 : strID.hashCode());
                                   return result;
                               }
                               public boolean equals(Object obj) {
                                   if (this == obj)
                                       return true;
                                   if (obj == null)
                                       return false;
                                   if (getClass() != obj.getClass())
                                       return false;
                                   Student other = (Student) obj;
                                   if (age != other.age)
                                       return false;
                                   if (grade == null) {
                                       if (other.grade != null)
                                           return false;
                                   } else if (!grade.equals(other.grade))
                                       return false;
                                   if (name == null) {
                                       if (other.name != null)
                                           return false;
                                   } else if (!name.equals(other.name))
                                       return false;
                                   if (strID == null) {
                                       if (other.strID != null)
                                           return false;
                                   } else if (!strID.equals(other.strID))
                                       return false;
                                   return true;
                               }
                           }

            测试类:

                           import java.util.HashSet;
                           import java.util.Iterator;
                           import java.util.Set;
                           public class TestHashSetDemo01 {
                               public static void main(String[] args) {
                                Set<Student> set=new HashSet<Student>();
                                   Student s1=new Student("164101",20,"大二","郑一");
                                   Student s2=new Student("164102",21,"大一","王二");
                                   Student s3=new Student("164103",20,"大二","张三");
                                   set.add(s1);
                                   set.add(s2);
                                   set.add(s3);
                                   set.add(new Student("164104",19,"大二","李四"));
                                   System.out.println(set.size());//输出结果:4
                                Student s4=new Student("164103",20,"大二","张三");
                                //未在Student类中重写hashCode与equals方法
                                set.add(s4);
                                   System.out.println(set.size());//输出结果:5
                                //在Student类中重写hashCode与equals方法
                                   set.add(s4);
                                   System.out.println(set.size());//输出结果:4
                                   //删除有两种情况
                                //情况一:已知地址信息,可直接删除
                                   set.remove(s3);
                                   System.out.println(set.size());//输出结果:3
                                   //情况二:地址信息未知,可重新生成相同对象
                                   set.remove(new Student("164104",19,"大二","李四"));
                                System.out.println(set.size());//输出结果:2
                                   //在放入集合中后,元素属性不可随意进行修改,否则在后续删除操作中会造成不必要的麻烦,并可能造成内存溢出
                                //原因:
                                //存入时:原元素属性参与hash运算得出地址
                                //删除时:此时元素属性参与hash运算得出地址
                                //我们可以得知,如果修改后删除,得出的地址处并没有元素,故无法删除
                                //解决方法:将丢该元素属性值改回原值后可进行删除
                                   s2.setAge(18);
                                   set.remove(s2);
                                   System.out.println(set.size());//输出结果:2
                                   s2.setAge(21);
                                   set.remove(s2);
                                   System.out.println(set.size());//输出结果:1
                                   //set集合虽然无序,依然可是使用迭代器进行遍历
                                   Iterator<Student> it=set.iterator();
                                   while(it.hasNext()) {
                                       System.out.println(it.next());//输出结果:Student [strID=164101, age=20, grade=大二, name=郑一]
                                   }
                               }
                           }

Queue接口:

                ①boolean offer(E e):将元素添加到队尾

                ②E poll():移除队首元素并将其返回

                ③E peek():查看队首元素

                ④E remove():移除队首元素并将其返回

                ⑤boolean remove(Object o):移除指定元素

例三:

                           package com.hyxy;
                           import java.util.LinkedList;
                           import java.util.Queue;
                           public class TestQueue {
                               public static void main(String[] args) {
                                   Queue<String> queue=new LinkedList<String>();
                                   queue.offer("A");
                                   queue.offer("B");
                                   queue.offer("C");
                                   queue.offer("D");
                                   queue.offer("E");
                                   System.out.println(queue);//运行结果:[A, B, C, D, E]
                                   System.out.println(queue.poll());//运行结果:A
                                   System.out.println(queue);//运行结果:[B, C, D, E]
                                   System.out.println(queue.peek());//运行结果:B
                                   System.out.println(queue);//运行结果:[B, C, D, E]
                                   System.out.println(queue.remove());//运行结果:B
                                   System.out.println(queue);//运行结果:[C, D, E]
                                   System.out.println(queue.remove("D"));//运行结果:true
                                   System.out.println(queue);//运行结果:[C, E]
                               }
                           }
Deque接口:

                ①boolean offer(E e):添加元素到队尾

                ②boolean offerFirst(E e):添加元素到队首

                ③boolean offerLast(E e):添加元素到队尾

                ④E poll():移除队首元素

                ⑤E pollFirst():移除队首元素

                ⑥E pollLast():移除队尾元素

                ⑦E peek():查看队首元素

                ⑧E peekFirst():查看队首元素

                ⑨E peekLast():查看队尾元素

例四:

                           package com.hyxy;
                           import java.util.Deque;
                           import java.util.LinkedList;
                           public class TestDeque1 {
                               public static void main(String[] args) {
                                   Deque<String> deque=new LinkedList<String>();
                                   deque.offer("A");
                                   deque.offer("B");
                                   System.out.println(deque);//输出结果:[A, B]
                                   deque.offerLast("C");
                                   System.out.println(deque);//输出结果:[A, B, C]
                                   deque.offerFirst("H");
                                   System.out.println(deque);//输出结果:[H, A, B, C]
                                   System.out.println(deque.poll());//输出结果:H
                                   System.out.println(deque);//输出结果:[A, B, C]
                                   System.out.println(deque.pollFirst());//输出结果:A
                                   System.out.println(deque);//输出结果:[B, C]
                                   System.out.println(deque.pollLast());//输出结果:C
                                   System.out.println(deque);//输出结果:[B]
                                   deque.peek();
                               }
                           }

Stack栈结构:

                ①void push(E e):进栈

                ②E pop():移除栈顶元素

                ③E peek():查看栈顶元素

例五:

                           package com.hyxy;
                           import java.util.Deque;
                           import java.util.LinkedList;
                           public class TestDeque2 {
                               public static void main(String[] args) {
                                   Deque<String> stack=new LinkedList<String>();
                                   stack.push("A");
                                   stack.push("B");
                                   stack.push("C");
                                   System.out.println(stack);//输出结果:[C, B, A]
                                   System.out.println(stack.peek());//输出结果:C
                                   System.out.println(stack);//输出结果:[C, B, A]
                                   System.out.println(stack.pop());//输出结果:C
                                   System.out.println(stack);//输出结果:[B, A]
                               }
                           }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值