Java基础知识(学习笔记一)

标识符:

1、组成——字母/_/$开头+字母/_/$/数字

2、严格区分大小写

3、不能是java中的关键字

关键字:

1、java中已经用作他途的,不能再继续使用

2、goto等虽然java中没有使用,但是后期有可能会用,称之为保留字,也不可以用作标识符。

2、null false true虽然不是关键字,但是不能作为标识符

java采用的字符集合为:Unicode(万国码,统一字符集),它只是一种标准。utf-8和utf-16都是它的实现。

数据类型:

1、数值型:

  1. 整型(备注:字面常量值是int类型,所以如果将一个超过int范围的字面值赋给一个long类型的变量存放时,后面加L或者l;如果byte和short变量赋值时,所赋的字面值不超过byte和short的范围,可以正常赋值)
  2. 浮点型(备注:浮点型的字面常量值为double类型的,将一个字面小数赋给一个float变量类型的数据存放时,需要在字面值后加F或f)

2、逻辑型(ture/false)

3、字符型(备注:一个单引号引起来的单个字符,不可以是0个,也不可以是多个。可以参与四则运算)(一个字符两个字节,所有的字符都对应着二进制码,字符也有相应的二进制代表,二进制转换即为对应的数字,所以可以参与四目运算。)

运算符:

优先级:

1、单目运算符>双目运算符>三目运算符

2、小括号最为优先(在实际的开发过程中,表达式使用多种运算符时,不必特别在意优先级,而是使用括号。因为使用括号,还有另外一个优点就是代码便于阅读。)

3、算数【++ -- 大于*/% 大于+ -】大于关系运算【> >= < <= 大于!= ==】大于逻辑运算【!大于其他的逻辑运算符】大于条件运算符大于赋值运算符

关系/比较运算符:> >= < <=用于比较基本数据类型;== !=既可以比较基本数据类型又可以比较引用数据类型

交换两个数的方法:

第一种:

//借助一个临时变量
int num1=10;
int num2=4;
int temp=num1;
num1=num2;
num2=temp;

第二种:

//两个数字异或三次
int num1=10;
int num2=4;
num1=num1^num2;
num2=num1^num2;
num1=num1^num2;

课后作业:

1、输出1-1000万的素数,计算运行的时间(初步代码,还需改进)

public class TestPrime {

	public static void main(String[] args) {
		//程序运行开始的时间
		long t1=System.currentTimeMillis();
		int count=1;
		//输出1-1000万以内的素数
		System.out.print(2+" ");
		for(int i=3;i<=10000000;i++){
			int j=2;
			for(;j<=(i/j);j++){
				if(i%j==0){
					break;
				}
			}
			if(j>(i/j)){
				System.out.print(i+" ");
				count++;
				//每行10个输出
				if(count%10==0){
					System.out.println();
				}
			}
		}
		long t2=System.currentTimeMillis();
		System.out.println();
		System.out.println("计算结束花费时间为:"+(t2-t1));
		
	}
}

2、写一个类模拟栈,完成insertSort排序,可用空间为1

代码实现:

模拟栈:

public class Stack {
	private List<Integer> list=new ArrayList();
	private int index=-1;
	
	
	/**
	 * 模拟出栈操作
	 * @return
	 */
	public int pop(){
		if(list.size()<=0){
			System.out.println("栈内没有任何的元素");
			return -1;
		}else{
			int number=list.get(index);
			list.remove(index);
			index--;
			return number;
		}
	}
	
	/**
	 * 模拟进栈操作
	 */
	public void push(int num){
		list.add(num);
		index++;
	}
	/**
	 * 按顺序打印栈元素
	 */
	public void print(){
		System.out.println(list);
	}
	/**
	 * 返回栈的长度
	 * @return
	 */
	public int length(){
		return index+1;
	}
	/**
	 * 判断栈是否为空
	 * @return
	 */
	public boolean isNull(){
		if(index<0){
			return true;
		}else{
			return false;
		}
	}
	/**
	 * 查看栈顶元素,但是不出栈
	 * @return
	 */
	public int peek(){
		return list.get(index);
	}

}

使用两个栈实现插入排序: 

public class TestSort {
	public static void main(String[] args) {
		//创建一个栈
		Stack oldStack=new Stack();
		oldStack.push(166);
		oldStack.push(89);
		oldStack.push(45);
		oldStack.push(189);
		oldStack.push(22);
		oldStack.push(1);
		//打印栈内元素
		oldStack.print();
		oldStack=insertSort(oldStack);
		oldStack.print();
		
		
	}
	/**
	 * 实现插入排序,空间复杂度为1
	 * @param oldStack	传入一个含有乱序元素的栈
	 */
	public static Stack insertSort(Stack oldStack){
		//新栈为有序的栈
		Stack newStack=new Stack();
		//判断栈中的元素是否为空栈
		if(oldStack.isNull()){
			System.out.println("栈内没有任何元素!");
		}else{
			//将乱序栈内的第一个元素加入到新栈中
			newStack.push(oldStack.pop());
			//如果乱序栈不为空,就进行出栈排序
			while(!oldStack.isNull()){
				int small=0;//记录乱序栈栈顶元素比新栈栈顶元素小的个数
				Integer temp=0;
				if(oldStack.peek()>=newStack.peek()){
					newStack.push(oldStack.pop());
				}else{
					//乱序栈中的栈顶元素小于新栈中的元素,将乱序栈中的栈顶元素放到临时变量temp中
					temp=oldStack.pop();
					//将新栈中比temp大的元素先放到乱序栈中,并记录个数
					while(temp<newStack.peek()&&!newStack.isNull()){
						oldStack.push(newStack.pop());
						small++;
					}
					newStack.push(temp);
					//将放入乱序栈中的元素放回新栈
					for(int i=0;i<small;i++){
						newStack.push(oldStack.pop());
					}
				}
			}
		}
		return newStack;
	}

}

猜你喜欢

转载自blog.csdn.net/ToBe_Coder/article/details/81349159