Java基础练习题 (4)数组操作

(1)如何创建空数组?

int[] array = {};
int[] array = new int[]{};

如果是创建空集合呢?Collections 类有一个方法 emptyList(), 返回一个空 List,当然你可以直接 new 一个List也是一样的,只是 emptyList() 方法返回的 List 是被 final 修饰的。

(2)如何对数组进行排序?
java.util.Arrays 类包含很多对数组进行操作的方法,如排序、搜索等,排序我们可以使用 Arrays.sort()方法,

int[] array = {5, 3, 7, 1, 0, 88};
Arrays.sort(array);

这样 array 就会从小到大排好序了,当然这个 sort 方法还可以对其他类型进行排序,详情可以查阅文档。

(3)如何提取数组的一部分生成另一个数组?
使用 Arrays.copyOfRange 方法,有三个参数,第一个是要提取的数组,第二个是从哪里开始,第三个是到哪里结束且不包括该位置。

int[] array = {1, 2, 3, 4, 5};
int[] newArray = Arrays.copyOfRange(array, 0, 2);

newArray 就是 {1, 2},当然也可以自己写个循环来赋值,想当于重新写一个 copyOfRange 了。

(4)如何合并两个数组,同时使合并的数组中不包含重复的元素?
这里的前提条件应该是这两个数组本身不包含重复的元素。
暂时没想到较好的写法。

(5)如何在数组中用二分法搜索元素?
使用 Arrays.binarySearch 方法,

int[] array = {1, 2, 3, 4, 5};
int position = Arrays.binarySearch(array, 3);
System.out.println(position);

上面代码打印出 “2”, 就是 3 在数组 array 中的位置。注意传入的数组必须是已经排好序的,不然结果会不准确,了解二分查找的应该都知道。如果没有找到要找的元素,会返回什么呢?查阅文档,可以看到

Returns: index of the search key, if it is contained in the array; otherwise, (-(insertion point) - 1). The insertion point is defined as the point at which the key would be inserted into the array: the index of the first element greater than the key, or a.length if all elements in the array are less than the specified key. Note that this guarantees that the return value will be >= 0 if and only if the key is found.

就是说如果没有找到,就返回 (-(insertion point) - 1),这个 insertion 就是对于被搜索的数组来说,要查找的元素会被放置的位置。比如说你在 {1, 3, 5} 中查找 2 ,会返回 (-(1) - ),也就是 -2,这里的 insertion = 1,因为 2 会放置在第二个位置。

随着 Java 版本的更新,越来越多的通用方法被加入进 jdk 里面,很多方法我们都不需要自己写了,也就是不用重复造轮子了,当然我们还是需要去了解这个方法的实现原理,这样我们才会有比较实际性的成长。

(6)如何将数组反转?
我在文档里貌似没看到可以直接反转的方法,所以就考虑自己写一个吧,这里以 int 数组为例

public void reverse(int[] array) {
  int start = 0;
  int end = array.length - 1;
  while(start < end) {
    int temp = array[start];
    array[start] = array[end];
    array[end] = temp;
    start++;
    end--;
  }
}

就是通过循环将头尾逐次交换。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、判断题(每题1分,共15分) 1、Java允许创建不规则数组,即Java多维数组中各行的列数可以不同。 ( ) 2、接口和类一样也可以有继承关系,而且都只能支持单继承。 ( ) 3、所有类至少有一个构造器,构造器用来初始化类的新对象,构造器与类同名,返回类型只能为void。 ( ) 4、包是按照目录、子目录存放的,可以在程序中用package定义包,若没有package一行,则表示该文件中的类不属于任何一个包。 ( ) 5、Java对事件的处理是采用委托方式进行的,即将需要进行事件处理的组件委托给指定的事件处理器进行处理。 ( ) 6、在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将父类放在前面,子类放在后面。 ( ) ..... 二、单项选择题(每题2分,共30分) 1、若在某一个类定义中定义有如下的方法: final void aFinalFunction( );则该方法属于( )。 A、本地方法 B、解态方法 C、最终方法 D、抽象方法 2、main方法是Java Application程序执行的入口点,关于main方法的方法头以下哪项是合法的( )。 A、 public static void main() B、 public static void main(String[ ] args) C、 public static int main(String[ ] args) D、 public void main(String arg[ ]) 3、在Java中,一个类可同时定义许多同名的..... ...... 14、一个线程的run方法包含以下语句,假定线程没有被打断,以下哪项是正确的( ) 1.try{ 2. sleep(100); 3. }catch(InterruptedException e){ } A、不能通过编译,因为在run方法中可能不会捕捉到异常。 B、在第2行,线程将暂停运行,正好在100毫秒后继续运行。 C、在第2行,线程将暂停运行,最多在100毫秒内将继续运行。 D、在第2行,线程将暂停运行,将在100毫秒后的某一时刻继续运行。 15、以下哪个接口的定义是正确的?( ) A、 interface A { void print() { } ;} B、 abstract interface A { void print() ;} C、 abstract interface A extends I1, I2 //I1、I2为已定义的接口 { abstract void print(){ };} D、 interface A { void print();} 三、程序阅读题(1~8题每题4分,第9题占8分,共40分) 1、若文件test.dat不存在,则试图编译并运行以下程序时会发生什么情况? import java.io.*; class TestIO { public static void main(String[] args) { try{ RandomAccessFile raf=new RandomAccessFile("test.dat","r"); int i=raf.readInt(); } catch(IOException e){System.out.println("IO Exception"); } } } 2、以下程序的输出结果为 。 public class EqualsMethod { public static void main(String[] args) { Integer n1 = new Integer(12); Integer n2 = new Integer(12); System.out.print(n1= =n2); System.out.print(“,”); System.out.println(n1! =n2); } } ........ 1、在java中如果声明一个类为final,表示什么意思? 答:final是最终的意思,final可用于定义变量、方法和类但含义不同,声明为final的类不能被继承。 2、父类的构造方法是否可以被子类覆盖(重写)? 答:父类的构造方法不可以被子类覆盖,因为父类和子类的类名是不可能一样的。 3、请讲述String 和StringBuffer的区别。 答:String 类所定义的对象是用于存放“长度固定”的字符串。 StringBuffer类所定义的对象是用于存放“长度可变动”的字符串。 4、如果有两个类A、B(注意不是接口),你想同时使用这两个类的功能,那么你会如何编写这个C类呢? ........

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值