JAVA学习笔记42——TreeSet、TreeMap应用+collections模拟斗地主洗牌
来源:互联网 发布:软件系统管理员手册 编辑:程序博客网 时间:2024/06/07 03:57
最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。
本篇的第一个内容是结合笔记40所讲的内容介绍一下TreeSet:
TreeSet:数据容器可以排序且不可重复,它是set接口的另一个实现类;对比而言的HashSet,元素必须重写hashcode、equals方法,而它不用。
下面是总结性的知识:
下面是四段实际应用代码,一个是TreeSet结合comparable成为实体比较类进行排序,一个是TreeSet借用comparator比较器成为排序业务类,一个是TreeMap结合comparable成为实体比较类进行排序,一个是TreeMap借用comparator比较器成为排序业务类。
首先放上的是公用的信息类,Person类和Worker类,其中worker类从代码可以看出是实现了comparable接口,加入(重写)了compara方法,为了实现其中一种比较方法:
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Person {//加上final是为了防止数据被随意修改,防止发生重复,同时去掉了所有的set方法private final String name;//名称private final int handsome;//帅气指数public Person() {name =null;handsome =0;}public Person(String name, int handsome) {super();this.name = name;this.handsome = handsome;}public String getName() {return name;}public int getHandsome() {return handsome;}@Overridepublic String toString() {return "姓名:"+this.name+",帅气指数:"+this.handsome+"\n";}}
//采用的是实体类实现comparable接口来进行排序public class Worker implements java.lang.Comparable<Worker> {//工种private String type;//工资private double salary;public Worker() {// TODO Auto-generated constructor stub}public Worker(String type, double salary) {super();this.type = type;this.salary = salary;}public String getType() {return type;}public void setType(String type) {this.type = type;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}/** * 按工资升序 */@Overridepublic int compareTo(Worker o) {return this.salary>o.salary?1:( this.salary==o.salary?0:-1);}@Overridepublic String toString() {return "工种:"+this.type+",工资:"+this.salary+"\n";}}NO.1:TreeSet结合comparable成为实体比较类进行排序
import java.util.TreeSet;/** * 实体类实现Comparable 接口的应用 * @author Administrator * */public class TreeSetDemo2 {public static void main(String[] args) {Worker w1 =new Worker("垃圾回收员",12000);Worker w2 =new Worker("农民工",8000);Worker w3 =new Worker("程序猿",5000);TreeSet<Worker> employees =new TreeSet<Worker>();employees.add(w1);employees.add(w2);employees.add(w3);System.out.println(employees);}}NO.2:TreeSet借用comparator比较器成为排序业务类
import java.util.TreeSet;/** * 采用提供耦的方式:业务排序类 * @author Administrator * */public class TreeSetDemo {public static void main(String[] args) {Person p1 =new Person("您",100);Person p2 =new Person("刘德华",1000);Person p3 =new Person("梁朝伟",1200);Person p4 =new Person("老裴",50);//依次存放到TreeSet容器中,使用排序的业务类(匿名内部类)TreeSet<Person> persons =new TreeSet<Person>(new java.util.Comparator<Person>(){@Overridepublic int compare(Person o1, Person o2) {return -(o1.getHandsome()-o2.getHandsome());}});persons.add(p1);//TreeSet 在添加数据时就开始排序,边比较边添加persons.add(p2);persons.add(p3);persons.add(p4);System.out.println(persons);/*//改变数据p4.setHandsome(100);p4.setName("您");*/ //p4 与p1 内容重复 System.out.println(persons);}}NO.3:TreeMap结合comparable成为实体比较类进行排序
import java.util.TreeMap;public class TreeMapDemo02 {/** * @param args */public static void main(String[] args) {Worker w1 =new Worker("垃圾回收员",12000);Worker w2 =new Worker("农民工",8000);Worker w3 =new Worker("程序猿",5000);//由于实体类已经实现了comparable接口,所以不用再加什么比较器了TreeMap<Worker,String > employees =new TreeMap<Worker,String >();employees.put(w1,"bjsxt");employees.put(w2,"bjsxt");employees.put(w3,"bjsxt");System.out.println(employees.keySet());}}NO.4:TreeMap借用comparator比较器成为排序业务类
import java.util.Set;import java.util.TreeMap;public class TreeMapDemo {public static void main(String[] args) {Person p1 =new Person("您",100);Person p2 =new Person("刘德华",1000);Person p3 =new Person("梁朝伟",1200);Person p4 =new Person("老裴",50);//这里必须在构造方法里面提高一个比较器,使得person可以转化为comparator,再重写conpare方法(这里加上负号实现了降序)来实现排序TreeMap<Person,String> map =new TreeMap<Person,String>(new java.util.Comparator<Person>(){@Overridepublic int compare(Person o1, Person o2) {return -(o1.getHandsome()-o2.getHandsome());}} );map.put(p1, "bjsxt");map.put(p2, "bjsxt");map.put(p3, "bjsxt");map.put(p4, "bjsxt");//查看键Set<Person> persons =map.keySet();System.out.println(persons);}}本篇的第二个内容是借用collections工具类的几个常见的方法来模拟斗地主洗牌、发牌过程,部分细节解释在代码的注释部分:
import java.util.ArrayList;import java.util.Collections;import java.util.List;/** * 常见方法介绍: *1、 binarySearch(List<? extends Comparable<? super T>> list, T key) 容器有序 *2、sort(List<T> list) //排序 sort(List<T> list, Comparator<? super T> c) *3、reverse(List<?> list) //元素反转 4、shuffle(List<?> list) 洗牌 5、swap(List<?> list, int i, int j) 将两个指定容器对应的索引进行交换 */public class CollectionsDemo01 {public static void main(String[] args) {List<Integer> cards =new ArrayList<Integer>();//shuffle 洗牌 模拟斗地主for(int i=0;i<54;i++){cards.add(i); }//洗牌Collections.shuffle(cards) ;//依次发牌List<Integer> p1 =new ArrayList<Integer>();List<Integer> p2 =new ArrayList<Integer>();List<Integer> p3 =new ArrayList<Integer>();List<Integer> last =new ArrayList<Integer>(); //底牌for(int i=0;i<51;i+=3){ //留三张底牌p1.add(cards.get(i));p2.add(cards.get(i+1));p3.add(cards.get(i+2));}//最后三张为底牌last.add(cards.get(51));last.add(cards.get(52));last.add(cards.get(53));System.out.println("第一个人:"+p1);System.out.println("第二个人:"+p2);System.out.println("第三个人:"+p3);System.out.println("底牌为:"+last);}//反转public static void test1(){List<Integer> list =new ArrayList<Integer>();list.add(1);list.add(2);list.add(3);list.add(4);System.out.println(list);Collections.reverse(list);System.out.println("反转之后"+list);}}
0 0
- JAVA学习笔记42——TreeSet、TreeMap应用+collections模拟斗地主洗牌
- Collections类使用,模拟斗地主洗牌
- 【Java学习笔记】16.TreeMap集合实现斗地主洗牌发牌
- java模仿斗地主随机洗牌 发牌,TreeMap、ArrayList、TreeSet练习
- java学习笔记(二十五)模拟斗地主发牌与洗牌
- 黑马程序员——用java模拟斗地主洗牌和发牌
- Java中使用HashMap,TreeSet和List来实现模拟斗地主的洗牌和发牌的小例子
- 用java模拟斗地主洗牌和发牌
- 用java编写模拟斗地主洗牌发牌程序
- Java模拟斗地主洗牌、发牌和对牌排序
- Java实现--模拟斗地主的洗牌和发牌
- java-模拟斗地主的洗牌和发牌
- Java-斗地主洗牌发牌
- java斗地主 洗牌发牌
- Java_基础—模拟斗地主洗牌和发牌并对牌进行排序
- 模拟斗地主洗牌和发牌
- java——斗地主
- 【JavaSE学习笔记】集合应用_Collectons工具,模拟斗地主,异常
- ceph存储 深入浅出异步I/O模型
- Web开发中致命的8个小错误
- IBM与物联网
- 2、如何自学Struts2之Struts2例子实践[视频]
- ceph存储 使用异步I/O大大提高应用程序的性能
- JAVA学习笔记42——TreeSet、TreeMap应用+collections模拟斗地主洗牌
- 某B公司面试
- for标签之遍历书包,显示数据列表
- php实现4种排序算法
- 简单工厂模式和策略模式的区别
- Dokuwiki 筆記
- 小能科技
- 招聘系统研发
- 运用JS设置cookie、读取cookie、删除cookie