实体类:public class People { private int code;//编号 private int location;//位置 public People() { } public People(int code, int location) { this.code = code; this.location = location; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public int getLocation() { return location; } public void setLocation(int location) { this.location = location; } @Override public String toString() { return "People{" + "code=" + code + ", location=" + location + '}'; } } 业务代码 import java.util.ArrayList; import java.util.List; import java.util.Random; public class StuTest { //幸存者案例 1-200随机数 100个囚犯 static List<People> peoples = new ArrayList<>(); public static void main(String[] args) { Random r = new Random(); for (int i = 1; i <= 100; i++) { //需要判断生成的编号是否是唯一的 int code = r.nextInt(200) + 1; if(exist(code)){ People p = new People(code, i); peoples.add(p); }else{ i--; } } //反复删除奇数位置的人 while (peoples.size()>1){ List<People> tempPeoples = new ArrayList<>(); for (int i = 1; i < peoples.size(); i += 2) { People p = peoples.get(i); tempPeoples.add(p); } peoples = tempPeoples; } People luckPeople = peoples.get(0); System.out.println(luckPeople); } public static boolean exist(int code){ for(People people:peoples){ if(people.getCode() == code){ return false; } } return true; } }
实体类自己编辑,以下为业务代码:
import java.time.LocalDate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Test { public static void main(String[] args) { //字符串数据 String str = "10001:张三:男:1990-01-01#10002:李四:女:1989-01-09#10003:王五:男:1999-09-09#10004:刘备:男:1899-01-01#10005:孙悟空:男:1900-01-01#10006:张三:女:1999-01-01#10007:刘备:女:1999-01-01#10008:张三:女:2003-07-01#10009:猪八戒:男:1900-01-01"; List<User> users = new ArrayList<>(); //把全部用户数据用 # 分隔 String[] userStrArray = str.split("#"); for (String userStr : userStrArray) { //创建一个用户封装用户数据 User user = new User(); String[] userData = userStr.split(":"); user.setId(Long.valueOf(userData[0])); user.setName(userData[1]); user.setGender(userData[2]); user.setBirthday(LocalDate.parse(userData[3])); //将每个对象存在集合里面去 users.add(user); } System.out.println(users); //实现最后功能 Map<String, Integer> result = new HashMap<>(); for (User user : users) { String name = user.getName(); if(result.containsKey(name)){ result.put(name,result.get(name) + 1); }else{ result.put(name,1); } } //遍历map集合 result.forEach((k,v)->{ System.out.println(k+":"+v+"次"); }); } }
业务代码:
import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { public static void main(String[] args) { //找出起始位置到目标位置的全部日子 LocalDate startTime = LocalDate.of(2022, 2, 3); Scanner scanner = new Scanner(System.in); System.out.println("请您输入要查询的年份和月份,以便为您展示该月休息日(注意必须是2022-02开始)"); String currentDate = scanner.next()+"-01"; LocalDate endTime = LocalDate.parse(currentDate); LocalDate endDate = endTime; //拿到这个月份的最后一天日子 月份+1,日期-1得到 endTime = endTime.plusMonths(1).minusDays(1); System.out.println(endTime); //从起始日子到结束日子的全部日子,方便进行信息查询 List<Day> days = new ArrayList<>(); while (startTime.isBefore(endTime)){ Day day = new Day(startTime); days.add(day); startTime = startTime.plusDays(1); } System.out.println(days); //从头开始遍历,标志休息日 for (int i = 0; i < days.size(); i+=3) { Day day = days.get(i); day.setFlag(true); } //展示当月的休息日情况 List<Day> currentDayRest = new ArrayList<>(); for (int i = 0; i < days.size(); i++) { Day day = days.get(i); if(day.getDate().isBefore(endDate)){ continue; } if(day.isFlag()){ currentDayRest.add(day); } day.printInfo(); } //那些休息日是周末 currentDayRest.stream().filter(d->d.getDate().getDayOfWeek().getValue()==6||d.getDate().getDayOfWeek().getValue()==7) .forEach(d->{ System.out.println(d); if(d.getDate().getDayOfWeek().getValue() == 6){ System.out.println("周六"); }else{ System.out.println("周天"); } }); } }
实体类:
public class Day { private LocalDate date; private boolean flag; public Day() { } public Day(LocalDate date) { this.date = date; } public Day(LocalDate date, boolean flag) { this.date = date; this.flag = flag; } public LocalDate getDate() { return date; } public void setDate(LocalDate date) { this.date = date; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } @Override public String toString() { return "Day{" + "date=" + date + ", flag=" + flag + '}'; } public void printInfo() { System.out.println(date+(flag?"休息":"")); } }
倒计时功能:
import java.time.Duration; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.TimerTask; public class TimeTask extends TimerTask { private LocalDateTime startTime; public TimeTask() { String s = "2024-06-07 09:00:00"; DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); startTime = LocalDateTime.parse(s,dtf); } @Override public void run() { //拿到此刻当前时间 LocalDateTime now = LocalDateTime.now(); //计算此时与高考日期的时间差 Duration duration = Duration.between(now, startTime); //获取时间差 toDays()=>toDaysPart() java8不支持本方法 System.out.println(duration.toDays()+"天"+duration.toHours()+"时"+duration.toMinutes()+"分"+duration.getSeconds()+"秒"); } }
人口:
import java.util.Timer; public class Start { public static void main(String[] args) { //创建一个定时器对象 Timer timer = new Timer(); timer.schedule(new TimeTask(),0,1000);//每隔一秒执行一次 new TimerTask()里面的run方法 } }
函数接口
@FunctionalInterface public interface MyConsumer<E> { void accept(E e); }
实现类 MyArrayList:
package com.taozi.demo3; import java.util.Arrays; import java.util.Objects; public class MyArrayList<E> { private Object[] elementData = {}; private int size; //记录元素个数,记录下一个位置 private int DEFAULT_CAPACITY = 10; //记录默认容量 public boolean add(E e){ //判断是否需要扩容 if(size == elementData.length){ grow(); } elementData[size++] = e; return true; } public E get(int index){ //做越界判断 checkIndex(index); return (E) elementData[index]; } public E remove(int index){ checkIndex(index); E e = (E) elementData[index]; //判断是否需要移位 int moveFlag = size - index - 1; if(moveFlag != 0){ //数据移位操作 System.arraycopy(elementData,index + 1,elementData,index,moveFlag); } elementData[--size] = null; return e; } public int size(){ return size; } public void forEach(MyConsumer<E> action){ Objects.requireNonNull(action); for (int i = 0; i < size; i++) { action.accept((E) elementData[i]); } } private void checkIndex(int index){ if(index < 0 || index >= size){ throw new IndexOutOfBoundsException(index + "out of max length"+size); } } private void grow() { if(size == 0){ elementData = new Object[DEFAULT_CAPACITY]; }else{ // 变成原来的 1.5倍 elementData = Arrays.copyOf(elementData,elementData.length + elementData.length >> 1); } } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < size; i++) { E e = (E) elementData[i]; sb.append(e).append(i == size-1?"":", "); } sb.append("]"); return sb.toString(); } }
public class Test { public static void main(String[] args) { //2分查找的运用 int[] nums = {5,6,7,7,7,8,8,9}; int target = 7; int leftIndex = getLeftIndex(nums,target); int rightIndex = getRightIndex(nums,target); System.out.println(leftIndex+" " +rightIndex); } public static int getRightIndex(int[] nums,int target){ int start = 0; int end = nums.length -1; int rs = -1; while (start <= end){ int middle = (start+end)/2; if(target > nums[middle]){ start = middle + 1; }else if(target < nums[middle]){ end = middle - 1; }else{ rs = middle; start = middle + 1; } } return rs; } public static int getLeftIndex(int[] nums,int target){ int start = 0; int end = nums.length -1; int rs = -1; while (start <= end){ int middle = (start+end)/2; if(target > nums[middle]){ start = middle + 1; }else if(target < nums[middle]){ end = middle - 1; }else{ rs = middle; end = middle - 1; } } return rs; } }
package com.taozi.demo6; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class MyLinkedList<E> { private int size; public static class Node<E>{ E data; Node<E> next; public Node(E data, Node<E> next) { this.data = data; this.next = next; } } public Node<E> add(){ Node<E> head = null; Scanner sc = new Scanner(System.in); while (true){ System.out.println("请输入你都节点的值"); String data = sc.next(); if(data.equals("exit")) break; if(head == null){ head = new Node(data,null); }else{ Node<E> temp = head; while (temp.next != null){ temp = temp.next; } temp.next = new Node(data,null); } size++; } return head; } public Node<E> reverse(Node<E> head,int left,int right){ if(head ==null || left < 1||left>size||right<1||right>size||left==right||left>right){ return head; } Node<E> first = head; Node<E> mark = null; List<E> data = new ArrayList<>(); int index = 0; while (head != null){ index++; if(index == left){ mark = head; } if(index >= left && index <= right){ data.add(head.data); } if(index == right) break; head = head.next; } //倒序 for (int i = data.size() - 1; i >= 0 ; i--) { E e = data.get(i); mark.data = e; mark = mark.next; } return first; } public void forEach(Node<E> head){ if(head == null){ System.out.println((Object) null); return; } while (head != null){ System.out.println(head.data + " "); head = head.next; } } }