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 每个请求必须逐个地被处理,一个请 ...
随机推荐
- 1 Openwrt无线中继设置并访问外网
https://www.cnblogs.com/wsine/p/5238465.html 配置目标 主路由器使用AP模式发射Wifi 从路由器使用Client模式接受Wifi 从路由器使用Master ...
- node.js、js读取excel、操作excel、创建excel之js-xlsx.js
node.js篇 第一步引入包 npm install xlsx -save 第二步使用 var xl =require('xlsx'); //workbook 对象,指的是整份 Excel 文档.我 ...
- springboot 与任务
异步任务.定时任务.邮件任务 一.异步任务 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在 处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用 多线程来 ...
- 【算法】shortest distance
好不容易找到的. #include<iostream> #include<iomanip> #include<cmath> using namespace std; ...
- redis 开启远程访问权限
1 开启redis端口访问权限 redis默认的端口是6379,要远程访问redis服务,确保服务器上的6379端口打开. 1.1 查看打开的端口 /etc/init.d/iptables statu ...
- 判定你的java应用是否正常(是否内存、线程泄漏)的一个简单方法
给大家推荐一个最简单的判定你的java应用是否正常的方法: step1:部署你的应用,让它跑起来: step2:打开jdk下bin目录下的jconsole.exe工具,连接到你的应用——以监测线程和内 ...
- 关于空想X
只是一个ID而已,我才不会告诉你这是一艘法国驱逐舰 想去打CTF,但是什么也不会. 博主人很懒,估计也不会更几篇博客,嘿嘿嘿. 最近在学PYTHON,欢迎交流.
- Windows 上连接本地 Linux虚拟机上的 mysql 数据库
查看本机ip ifconfig 查看当前的 3306 端口状态 netstat -an|grep 3306 当前是外部无法连接状态 修改访问权限 默认的 mysql 是只能本机连接, 因此需要修改配 ...
- java 11 Java Flight Recorder
Flight Recorder源自飞机的黑盒子 Flight Recorder以前是商业版的特性,在java11当中开源出来,它可以导出事件到文件中,之后可以用Java Mission Control ...
- Golang语言的入门开始
一.golang介绍与安装 二.golang-hello world 三.golang的变量 四.golang的类型 五.golang的常量 六.golang的函数(func) 七.golang的包 ...