希尔排序
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)对象是函数、变量的集合体;而类是一组函数和变量的集合体,即类是一组具有相同属性的对象集合体。