跳到主要内容

集合List

· 阅读需 2 分钟
季冠臣
后端研发工程师

ArrayList和LinkedList的API是一样的,直接上代码

import java.util.LinkedList;

public class ListTest {

public static void main(String [] args){

//ArrayList<String> list = new ArrayList<>();
LinkedList<String> list = new LinkedList<>();

//往容器里面添加对象
list.add("jack");
list.add("tom");
list.add("marry");

String lastObj = list.getLast();
//System.out.println(list);
// System.out.println(list.get(0));

//更新一个元素
list.set(0,"小D");
System.out.println(list);

//返回大小
int size = list.size();
System.out.println("size="+size);

//根据索引删除一个元素
String indexRemove = list.remove(1);
System.out.println("删除后的元素:"+list);

//根据对象删除元素
boolean flag = list.remove("jack");



//是否为空
boolean beforeClear = list.isEmpty();

System.out.println("clear 之前 isEmpty = "+ beforeClear);

list.clear();
//清空元素
boolean afterClear = list.isEmpty();


System.out.println("clear 之后 isEmpty = "+ afterClear);


}
}

//重点:
//LinkedList特有api
//获取第⼀一个元素
list.getFirst();
//获取最后⼀一个元素
list.getLast();

ArrayList 1、基于数组实现,是一个动态的数组队列,但它和Java中的数组⼜不不一样,它的容量可以自动增⻓ 2、可以存储任意多的对象,但是只能存储对象,不能存储原生数据类型,例如int LinkedList 1、基于的数据结构是链表,⼀个双向链表,链表数据结构的特点是每个元素分配的空间不必连续 2、插⼊和删除元素时速度非常快,但访问元素的速度较慢

两者常见区别 (经典面试题) 1、两个都是List的接口,两个都是非线程安全的 2、ArrayList是基于动态数组的数据结构,而LinkedList是基于链表数据结构 3、对于随机访问get和set(查询操作),ArrayList要更好,因为LinkedList要移动指针 4、对于增删操作(add和remove),LinkedList优于ArrayList。

浏览量:加载中...

简单计算器

· 阅读需 1 分钟
季冠臣
后端研发工程师

写个计算器,能完成加减乘除运算,定义接口做参数,加减乘除定义4个类 定义⼀个静态工具类,把下面的接口作为其中⼀个形参对象,传递具体的运算符类完成计算.

interface ICompute{
int computer(int num1, int num2);
}
public class AddOper implements ICompute {
@Override
public int computer(int num1, int num2) {
return num1 + num2;
}
}
public class SubOper implements ICompute {
@Override
public int computer(int num1, int num2) {
return num1 - num2;
}
}
public class MulOper implements ICompute {
@Override
public int computer(int num1, int num2) {
return num1*num2;
}
}
public class DivideOper implements ICompute {
@Override
public int computer(int num1, int num2) {
try {
return num1/num2;
}catch (Exception e){
e.printStackTrace();
}
return -1;
}
}
public class UseCompute {
public static void compute(ICompute compute, int num1, int num2){
int result = compute.computer(num1,num2);
System.out.println(result);
}
// public static void add(AddOper compute, int num1, int num2){
//
// int result = compute.computer(num1,num2);
// System.out.println(result);
// }
//
// public static void sub(SubOper compute, int num1, int num2){
//
// int result = compute.computer(num1,num2);
// System.out.println(result);
// }
public static void main(String [] args){
UseCompute.compute(new AddOper(),25,5);
UseCompute.compute(new SubOper(),25,5);
UseCompute.compute(new MulOper(),25,5);
UseCompute.compute(new DivideOper(),25,0);
}
浏览量:加载中...

不能被继承

· 阅读需 1 分钟
季冠臣
后端研发工程师

下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lang.Double、java.lang.Math、 java.lang.ClassLoader

可以被继承:

  • Thread可以被继承,用于创建新的线程
  • Number类可以被继承,Integer,Float,Double等都继承自Number类
  • ClassLoader可以被继承,用户可以自定义类加载器

不能被继承:

Double类的声明为

public final class Doubleextends Numberimplements Comparable<Double>

Math类的声明为

public final class Mathextends Object
浏览量:加载中...

什么是多态

· 阅读需 1 分钟
季冠臣
后端研发工程师

什么是多态

同⼀个⾏为具有多个不同表现形式或形态的能⼒

常见的方式:

1、继承⽅法重写 Override

2、同类方法重载 Overload

3、抽象⽅法 abstract

4、接口 implements

浏览量:加载中...

抽象的特点

· 阅读需 2 分钟
季冠臣
后端研发工程师

抽象类与抽象方法特点

抽象类的特点 1、抽象类不能被实例化,因为抽象类中方法未具体化,这是⼀种不完整的类,所以不能直接实例化,编译无法通过。 2、抽象类中不一定包含抽象⽅方法,但是有抽象方法的类必定是抽象类。 3、如果一个抽象类中可以没有抽象方法,这样做的目的是为了此类不能被实例化。 4、抽象类的⼦类必须给出抽象类中的抽象方法的具体实现,否则⼦类也是抽象类,需要⽤abstract声明。 5、抽象类不能使用final关键字修饰,因为final修饰的类是⽆法被继承。

抽象⽅法的特点 1、抽象类中的抽象⽅法只是声明,不包含方法体。 2、抽象方法不能⽤private修饰,因为抽象方法必须被⼦类实现(覆写),⽽private权限对于⼦类来说是不能访问的。 3、一个类继承了一个抽象类,那么它必须全部覆写抽象类中的抽象⽅方法,当然也可以不全部覆写,如果不覆写全部抽象方法则这个子类也必须是抽象类。 构造⽅方法,类⽅方法(即static 修饰的⽅方法)不能声明为抽象⽅方法

浏览量:加载中...

练习题3

· 阅读需 4 分钟
季冠臣
后端研发工程师

这是一道mysql数据查询的练习题

数据表:

/*创建部门表*/
CREATE TABLE dept(
  deptnu     INT PRIMARY KEY comment '部门编号',
  dname       VARCHAR(50) comment '部门名称',
  addr       VARCHAR(50) comment '部门地址'
);

某个公司的员工表
CREATE TABLE employee(
  empno       INT PRIMARY KEY comment '雇员编号',
  ename       VARCHAR(50) comment '雇员姓名',
  job         VARCHAR(50) comment '雇员职位',
  mgr         INT comment '雇员上级编号',
  hiredate   DATE comment '雇佣日期',
  sal         DECIMAL(7,2) comment '薪资',
  deptnu     INT comment '部门编号'
)ENGINE=MyISAM DEFAULT CHARSET=utf8;

/*创建工资等级表*/
CREATE TABLE salgrade(
  grade       INT PRIMARY KEY comment '等级',
  lowsal     INT comment '最低薪资',
  higsal     INT comment '最高薪资'
);

1、查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。

涉及表: employee dept
语句:select deptnu,count(*) from employee group by deptnu

语句:select a.deptnu,a.dname,a.addr, b.zongshu from dept a,(select deptnu,count(*) as zongshu from employee group by deptnu) b where a.deptnu=b.deptnu;

2、列出薪金比安琪拉高的所有员工。

涉及表:employee
语句:select * from employee where sal > (select sal from employee where ename='安琪拉');

3、列出所有员工的姓名及其直接上级的姓名。

涉及表:employee
语句:select a.ename,ifnull(b.ename,'BOSS') as leader from employee a left join employee b on a.mgr=b.empno;

4、列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。

涉及表:employee dept
条件:a.hiredate < b.hiredate

语句:select a.empno,a.ename,c.dname from employee a left join employee b on a.mgr=b.empno left join dept c on a.deptnu=c.deptnu where a.hiredate < b.hiredate;

5、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门

涉及表:dept employee
语句:select a.dname,b.* from dept a left join employee b on a.deptnu=b.deptnu;

6、列出所有文员的姓名及其部门名称,所在部门的总人数。

涉及表:employee dept
条件:job='文员'

语句:select deptnu,count(*) as zongshu from employee group by deptnu;

语句:select b.ename,a.dname,b.job,c.zongshu from dept a ,employee b ,(select deptnu,count(*) as zongshu from employee group by deptnu) c where a.deptnu=b.deptnu and
b.job='文员' and b.deptnu=c.deptnu;

7、列出最低薪金大于15000的各种工作及从事此工作的员工人数。

涉及表:employee
条件:min(sal) > 15000
语句:select job,count(*) from employee group by job having   min(sal) > 15000;

8、列出在销售部工作的员工的姓名,假定不知道销售部的部门编号

涉及表:employee dept
select ename from employee where deptnu=(select deptnu from dept where dname='销售部');

9、列出与诸葛亮从事相同工作的所有员工及部门名称。

涉及表:employee dept

语句:select a.ename,b.dname from employee a,dept b where a.deptnu=b.deptnu and a.job=(select job from employee where ename='诸葛亮');

语句:select a.ename,b.dname from employee a left join dept b on a.deptnu=b.deptnu where a.job=(select job from employee where ename='诸葛亮');

10、列出薪金比 在部门30工作的员工的薪金 还高的员工姓名和薪金、部门名称。

涉及表:employee dept
语句:select a.ename,a.sal,b.dname from employee a ,dept b where a.deptnu=b.deptnu and sal > (select max(sal) from employee where deptnu=30);

11、列出每个部门的员工数量、平均工资。

涉及表:employee
语句:select deptnu , count(*) ,avg (sal) from employee group by deptnu;

12、列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。

涉及表:employee dept salgrade
条件:select avg(sal) from employee

语句:elect a.*,c.dname,b.ename,d.grade from employee a,employee b,dept c ,salgrade d where a.mgr=b.empno and a.deptnu =c.deptnu and a.sal > (select avg(sal) from
employee) and   a.sal between d.lowsal and d.higsal;
浏览量:加载中...

练习题2

· 阅读需 1 分钟
季冠臣
后端研发工程师

Java继承后类的初始化顺序

问题:静态代码块、⾮静态代码、⽗类/子类无参构造⽅方法、父类/子类的⼀一般⽅法

public class Father {
static {
System.out.println("父类静态代码块");
}
public Father(){
System.out.println("father 无参构造函数");
}
public Father(int age){
System.out.println("father 有参构造函数");
}
public void sleep(){
System.out.println("father sleep方法");
}
}
public class Children extends Father{
static {
System.out.println("Child静态代码块");
}
public Children(){
//super();
System.out.println("Child⽆参构造函数");
super.sleep();
}
public void sleep(){
System.out.println("Child sleep方法");
}
}
public static void main(String[] args) {
new Children().sleep();
}
浏览量:加载中...

练习题1

· 阅读需 2 分钟
季冠臣
后端研发工程师

简单的Java有关数组、循环的练习题

知识点:数组、循环、if、边界

创建100个学生对象,id编号为1-100 把编号可以大于60的归为二组,其它归为一组

知识点:switch

定义一个方法,给1-4其中一个数字,返回春夏秋冬字符串,不命中则返回 错误季节。

知识点:static、数组、循环

定义一个Dog类,里面含有age静态变量初始值为10,有一个name成员属性,有一个changAge方法,使age自增1,创建含5个的dog数组,获取数组角标为3的dog对象,调用两次changAge方法,最后打印5个dog对象的age分别为多少?

public class AnswerTest {

public static void main(String [] args){
// test1();

//test2();
test3();
}

public static void test3(){
Dog [] dogs = new Dog[5];

for(int i=0; i<5; i++){
Dog dog = new Dog();
dog.setName("旺财"+i);
dogs[i] = dog;
}

Dog dog = dogs[3];
dog.changeAge();
dog.changeAge();

for (Dog d : dogs){
System.out.println("名称="+d.getName() + ", age="+d.getAge());
}


}

public static void test2(){
int season = 10;

String content;

switch (season){
case 1:content="春";
break;

case 2:content="夏";
break;

case 3:content="秋";
break;

case 4:content="冬";
break;

default: {
content="错误季节";
System.out.println("default 执行");
}
}

System.out.println(content);

}

public static void test1(){
Student[] arr1 = new Student[60];
int arr1Index = 0;

Student[] arr2 = new Student[40];
int arr2Index = 0;

for(int i=0; i<100; i++){
int num = i+1;
Student student = new Student();
student.setId(num);
if(num > 60){
arr2[arr2Index] = student;
//arr2Index = arr2Index +1;
arr2Index++;
}else {
arr1[arr1Index] = student;
arr1Index++;
}
}


for(Student s: arr1){
System.out.println(s.getId());
}

System.out.println("============");
for(Student s: arr2){
System.out.println(s.getId());
}

}
}
public class Student {

private int id;

public int getId(){
return id;
}

public void setId(int id){
this.id = id;
}
}

public class Dog {

public static int age =10;

private String name;

public void setName(String name){
this.name = name;
}

public String getName(){
return name;
}

public void changeAge(){
age++;
}

public int getAge(){
return age;
}

}

浏览量:加载中...