JAVA进阶21
1、Vector向量
如何选用ArrayList、LinkedList、Vector?
①需要线程安全时,用Vector
②不存在线程安全问题时,并且查找较多用ArrayList(一般使用它)
③不存在线程安全问题时,增加或删除元素较多用LinkedList
2、Map的用法
package cn.zjc.mycollection; import java.util.HashMap;
import java.util.Map; public class TestMap {
public static void main(String[] args) {
Employee e1 = new Employee(101,"王大",200);
Employee e2 = new Employee(102,"王二",201);
Employee e3 = new Employee(103,"王仨",202);
Employee e4 = new Employee(104,"王四",203); Map<Integer,Employee> map = new HashMap<>(); map.put(101,e1);
map.put(102,e2);
map.put(103,e3);
map.put(104,e4);
Employee emp = map.get(101);
System.out.println(emp.getEname());
}
} //雇员信息
class Employee{
private int id;
private String ename;
private double salary; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getEname() {
return ename;
} public void setEname(String ename) {
this.ename = ename;
} public double getSalary() {
return salary;
} public void setSalary(double salary) {
this.salary = salary;
} public Employee(int id, String ename, double salary) {
this.id = id;
this.ename = ename;
this.salary = salary; }
}
运行结果图

3、发红包案例

package cn.intcast.demo16;
public abstract class User {
private String name; //姓名
private int money; //余额,当前用户拥有的钱数
public User() {
}
public void show(){
System.out.println("我叫:"+name+",我有:"+money+"元");
}
public User(String name, int money) {
this.name = name;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
User
package cn.intcast.demo16;
import java.util.ArrayList;
public class Manager extends User {
public Manager() {
}
public Manager(String name, int money) {
super(name, money);
}
public ArrayList<Integer> send(int totalMoney, int count) {
//首先需要一个集合,用来存储若干个红包的金额
ArrayList<Integer> redList = new ArrayList<>();
//确认群主用户有多少余额
int leftMoney = super.getMoney();
if (totalMoney > leftMoney) {
System.out.println("余额不足!");
return redList; //返回空集合
}
//扣钱,重新设置余额
super.setMoney(leftMoney - totalMoney);
//红包平均拆分成count份
int avg = totalMoney / count;
//除不尽的余数
int mod = totalMoney % count;
//将红包一个一个放到集合中
for (int i = 0; i < count - 1; i++) {
redList.add(avg);
}
//最后一个红包
int last = avg + mod;
redList.add(last);
return redList;
}
}
Manager
package cn.intcast.demo16; import java.util.ArrayList;
import java.util.Random; public class Member extends User {
public Member() {
} public Member(String name, int money) {
super(name, money);
} public void receive(ArrayList<Integer> list) {
//从多个红包中随机抽取一个
//随机获取一个集合中的索引编号
int index = new Random().nextInt(list.size());
//根据索引,从集合当中删除,并且得到被删除的红包,给我自己
int delta = list.remove(index);
//当前成员自己本来有多少钱
int money = super.getMoney();
//加法,并且重新设置回去
super.setMoney(money + delta);
}
}
Member
package cn.intcast.demo16;
import java.util.ArrayList;
public class MainRedPacket {
public static void main(String[] args) {
Manager manager = new Manager("群主",100);
Member one = new Member("成员A",10);
Member two = new Member("成员B",10);
Member three = new Member("成员C",10);
manager.show();
one.show();
two.show();
three.show();
System.out.println("===============");
//群主总共发32,分成3包
ArrayList<Integer> redList = manager.send(32,3);
//三个成员收红包
one.receive(redList);
two.receive(redList);
three.receive(redList);
manager.show();
one.show();
two.show();
three.show();
}
}
MainRedPacket
运行结果图

JAVA进阶21的更多相关文章
- Java线程间通信方式剖析——Java进阶(四)
原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...
- Java进阶(三)多线程开发关键技术
原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...
- Java进阶(三十四)Integer与int的种种比较你知道多少?
Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...
- Java进阶(五十二)利用LOG4J生成服务日志
Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...
- Java进阶之路
Java进阶之路——从初级程序员到架构师,从小工到专家. 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序 ...
- java进阶视频分享
更多资源和教程请关注公众号:非科班的科班. 如果觉得我写的还可以请给个赞,谢谢大家,你的鼓励是我创作的动力 课程目录介绍 01.开班仪式02.并发编程专题之多线程基础03.并发编程专题之Java内存模 ...
- Java 进阶 hello world! - 中级程序员之路
Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...
- [.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦
[.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦 本节导读:上篇文章简单介绍了.NET面向对象中一个重要的技术反射的基本应用,它可以让我们动态的调 ...
- Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请 ...
随机推荐
- 第一课android开发之在activity间传递参数
一.活动间简单参数传递:1.在布局中添加按钮,用<Button,用id设置id名称,id="@+id/这儿填写你要设置成的名称":用text设置按钮上显示的文字.text=& ...
- Mysql原理与优化
原文:https://mp.weixin.qq.com/s__biz=MzI4NTA1MDEwNg==&mid=2650763421&idx=1&sn=2515421f09c1 ...
- WordPress博客搭建与问题总结
一.WordPress博客搭建 1.安装Apache web服务器 yum install -y httpd systemctl restart httpd systemctl enable ht ...
- WEB工具类
import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; ...
- [ffmpeg] h264并行解码
ffmpeg中的并行解码分为两种: Frame-level Parallelism Slice-level Parallelism Frame-level Parallelism 帧间依赖 我们之前讨 ...
- 一本通网站 1378:最短路径(shopth)
[题目描述] 给出一个有向图G=(V, E),和一个源点v0∈V,请写一个程序输出v0和图G中其它顶点的最短路径.只要所有的有向环权值和都是正的,我们就允许图的边有负值.顶点的标号从1到n(n为图G的 ...
- Navicat 连接远程服务器mysql 长时间不操作会连接很久
服务器mysql 配置 本地mysql客户端配置 √ navicat 连接配置 右键连接,编辑连接,高级,保持连接间隔勾选,把240改为30,确定
- SaltStack说明文档
SaltStack说明文档 master安装 # 安装 yum -y install salt-master salt-minion salt-ssh # 启动 systemctl start sal ...
- 【LOJ#2402】[THUPC2017]天天爱射击(整体二分)
[LOJ#2402][THUPC2017]天天爱射击(整体二分) 题面 LOJ 题解 显然对于每块木板可以二分被打烂的时间. 那么直接上整体二分处理就行了. #include<iostream& ...
- MySql自动备份shell
MySql黑屏备份是每个运维工程师必备的技能,以下是MySQL自动备份脚本: #/bin/bash#This is mysql backup shell on 2019/4/28 BAKUP_DIR= ...