知识点(三)

希尔排序

package com;

import java.util.Arrays;

class F{
public static void shell_sort(int arr[], int len) {
    int gap, i, j;
    int temp;
    for (gap = len /2; gap > 0; gap = gap /2) {
    	
    	for (i = gap; i < len; i++) {
            temp = arr[i];
            for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap) {
            	arr[j + gap] = arr[j];
            }
            arr[j + gap] = temp;
        }
    	System.out.println(Arrays.toString(arr));
    }   
}

	public static void main(String args[]) {
		int[] a= {8,6,9,2,5,3,7,1};
		shell_sort(a,a.length);
	}
}

输出结果:
在这里插入图片描述

二分查找法

package com;
class G{
	//二分查找
	public static int binarySearch(int[] arr,int value) {
		int low=0;
		int high=arr.length-1;
		return search(arr,low,high,value);
	}
	public static int search(int arr[],int low,int high,int value) {
		if(low>high)return 0;
		int mid=(low+high)>>1;
		if(value==arr[mid]) {
			return mid;
		}
		if(value<arr[mid]) {
			return search(arr,low,mid-1,value);
		}
		return search(arr,mid+1,high,value);
	}
	
	public static void main(String args[]) {
		int[] a= {1,2,3,4,5,6,8,88,9};
		System.out.println(binarySearch(a,5));
	}
}

输出结果:
在这里插入图片描述
1、数组(Array)和列表(ArrayList)的区别,什么时候应该使用Array而不是ArrayList?
2、符号“==”比较的是什么?
3、Map的用法
(1) Map与Collection的区别
存储数据的形式不同,Collection中的集合,元素是孤立存在的。Map中的集合,元素是成对存在的,每个元素由键与值两部分组成,通过键可以找对所对应的值。Map中的集合不能包含重复的键,值可以重复,每个键只能对应一个值。

(2) 常用集合
HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

(3) 常用方法
get方法:获取指定键(key)所对应的值(value)。
put方法:将指定的键与值对应起来,并添加到集合中。使用put方法时,若指定的键(key)在集合中,方法返回值为键所对应的值。
remove方法:根据指定的键(key)删除元素,返回被删除元素的值(value)。

package com;

import java.util.HashMap;
import java.util.Map;

class MapDemo{
	public static void main(String args[]) {
		//创建Map对象
		Map<String,String> map=new HashMap<String,String>();
		//添加元素
		map.put("AAA", "Alice");
		map.put("BBB", "Bake");
		System.out.println(map);//输出:{AAA=Alice, BBB=Bake}
		
        //当给Map中添加元素,会返回key对应的原来的value值,若key没有对应的值,返回null
		
		System.out.println(map.put("CCC", "Carl"));//输出:null
		System.out.println(map);//输出:{AAA=Alice, CCC=Carl, BBB=Bake}
		
		System.out.println(map.put("CCC", "Carmen"));//输出:Carl
		System.out.println(map);//输出:{AAA=Alice, CCC=Carmen, BBB=Bake}
		
		String aha=map.get("BBB");
		System.out.println(aha);//输出:Bake
		
		String hey=map.remove("AAA");
		System.out.println(hey);//输出:Alice
		System.out.println(map);//输出:{CCC=Carmen, BBB=Bake}
	}
}

Map的遍历

package com;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

class MapDemo2{
	public static void main(String args[]) {
		//创建Map对象
		Map<String,String> map=new HashMap<String,String>();
		//添加元素
		map.put("1", "AAA");
		map.put("2", "BBB");
		map.put("3", "CCC");
		//获取Map中的所有key
		Set<String> set=map.keySet();
		//遍历存放着所有key的set集合
		Iterator<String>it=set.iterator();
		while(it.hasNext()) {
			//得到每一个key
			String key=it.next();
			//通过key获取value值
			String value=map.get(key);
			System.out.println(key+"="+value);
		}
	}
}

输出结果:
在这里插入图片描述
(4) Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢

4、Java中的概念,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
(1)构造函数名与类名完全相同

(2)构造函数无返回值类型

(3)构造函数可以有参数也可以没有参数,可以有一个参数或者多个参数

(4)可以对构造函数进行函数重载(在同一个类中定义多个函数名相同,参数不同的函数叫函数重载)

(5)当我们定义类后不声明任何构造函数,则java虚拟机会帮我们创建一个空参构造。假如我们声明了一个有参构造,java虚拟机就不会帮我们创建一个空参构造,此时我们想用空参构造创建一个对象,那么就必须在类中声明一个空参构造。

(6)构造函数不能继承,只能调用。

package com;
class Student{
	String id;
	String name;
	int age;
	
	//无参构造
	public Student() {
		
	}
	//有参构造
	public Student(String id,String name,int age) {
		this.id=id;
		this.name=name;
		this.age=age;
	}
	
	public static void main(String args[]) {
		Student s=new Student("1012","Four",13);
		System.out.println(s.id+","+s.name+" "+s.age);
	}
}

输出结果:
在这里插入图片描述
5、构造函数的作用
构造函数是面向对象编程所需要的,它主要有两个作用:

(1)创建对象。使用“new 构造函数名()”来创建对象。
(2)对象属性设置初值。构造函数创建对象后,可以对对象属性设置初值,无参构造函数设置的是null或者0;有参构造设置的是相应的初值。

6、请说明Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
7、说明Query接口的list方法和iterate方法有什么区别?
8、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,该说法是否正确,为什么?
9、请说明JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
10、abstract class和interface有什么区别?
(1)接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
(2)类可以实现很多个接口,但是只能继承一个抽象类
(3)类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
(4)抽象类可以在不提供接口方法实现的情况下实现接口。
(5)Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
(6)Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
(7)接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
11、Java是否支持多继承?
类不支持多继承,只支持单继承(即一个类只有一个父类)。 但是java中的接口支持多继承。
12、StringBuffer线程安全,StringBuilder线程不安全。
13、String不能被继承。
14、类和对象的区别
(1)类是对某一类事物的描述,是抽象的;而对象是一个实实在在的个体,是类的一个实例。
比如:“人”是一个类,而“教师”则是“人”的一个实例。
(2)对象是函数、变量的集合体;而类是一组函数和变量的集合体,即类是一组具有相同属性的对象集合体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值