后端-第二周作业考核
1.编写一个圆类 Circle 的 Java 程序。圆类有2个数据成员 , 分别是半径radius和颜色 color, 这些属性可以查看 get 也可以重新设置 set, 另外 , 圆还可以返回其面积 area 。
class Circle {
double radius = 0;
String color = null;
public Circle(double radius, String color) {
this.radius = radius;
this.color = color;
}
public double getRadius() {
return radius;
}
public String getColor() {
return color;
}
public void setRadius(double radius) {
this.radius = radius;
}
public void setColor(String color) {
this.color = color;
}
public double getArea() {
return radius * radius * Math.PI;
}
}
2. (1)ArrayList底层采用 可变数组 数据结构来实现的,LinkedList底层采用双向链表数据结构来实现的
在一般情况下,上述两种数据结构的优缺点是什么?
ArrayList 因为要维护数组角标,所以插入&删除数据比较慢
ArrayList 底层是数组,数组内存连续,改查数据比较快
LinkedList 插入&删除都只是移动指针效率很高
LinkedList 底层是双向链表,内存不连续,改查数据比较慢
当然二者都是有角标的,且都是线程不安全的
(2)HashSet底层数据结构在JDK8做了一次重大升级,JDK8之前采用的是数组+链表来实现的,也就是数组 +链表来实现;到了JDK8之后采用数组+链表+红黑树来实现。
提示:不会的话在网上找找,并记住。
**3.**编写一个程序,能够统计一句话中各个字母出现的次数。
示例 1:
输入:I love Echo
输出:{c=1, e=1, E=1, v=1, h=1, I=1, l=1, o=2}
提示:
map.containsKey(i)//使用Map做该题时,该方法可判断map集合中是否含有该key
String s=str.replace(" ", ""); //该代码可去除字符串中的空格
public class ShiYiShi{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
String s = str.replace(" ","");
char[] c = s.toCharArray();
Map<Character,Integer> count = new HashMap<>();
for (char i:c) {
if (count.containsKey(i)){
count.put(i,count.get(i) + 1);
}else{
count.put(i,1);
}
}
System.out.println(count);
}
}
4.给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
public class ShiYiShi{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
String[] s1 = s.split("\\D+");
int len = s1.length;
for (int i = 1; i < len-2; i++) {
for (int j = 2; j < len-1; j++) {
if (Double.parseDouble(s1[i]) + Double.parseDouble(s1[j]) == Double.parseDouble(s1[len-1])){
int qian = i - 1;
int hou = j - 1;
System.out.println("[" + qian + "," + hou + "]");
}
}
}
}
}
5.创建一个对象类,成员变量为name和age,请存储学生对象并遍历
要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
提示:创建TreeSet集合,使用比较器排序。
示例
对象属性:
"xishi",23
"diaochan",28
"wangzhaojun",28
"yangyuhuan",25
排序后输出结果:
23,xishi
25,yangyuhuan
28,diaochan
28,wangzhaojun
public class ShiYiShi{
public static void main(String[] args) {
TreeSet<Student> students = new TreeSet<>();
students.add(new Student("xishi",23));
students.add(new Student("diaochan",28));
students.add(new Student("wangzhaojun",28));
students.add(new Student("yangyuhuan",25));
for (Student i:students) {
System.out.println(i);
}
}
}
class Student implements Comparable{
String name = null;
int age = 0;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public int compareTo(Object o) {
Student s = (Student)o;
if(this.age>s.age) {
return 1;
}else if(this.age<s.age){
return -1;
}else{
return this.name.compareTo(s.name);
}
}
@Override
public String toString() {
return ""+age+","+name+"";
}
}