`
zwtlong
  • 浏览: 167734 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

数组复习

阅读更多

JAVA数组的声明,初始化和为数组内容赋值:
   1>String[] s; //只是定义了一个指向String数组的数组对象,并未为其分配内存,如果此时使用编译器会报错
   s = new String[10]; //此时才真正的为该数组对象分配了10个内存空间,每个空间初始化为null,不过s仍然为reference;
   for(int i=0;i   s[i] = new String("Array" + (new Integer(i).toString()));//为数组对象中的每个对象赋值,其实这个数组对象中的每个对像
   它持有的仍然是reference
   2>String[] s = new String[10]; //定义初始化,为该数组对象分配了10个内存空间,每个空间初始化为null,不过s仍然为reference;
   for(int i=0;i   s[i] = new String("Array" + (new Integer(i).toString()));//为数组对象中的每个对象赋值,其实这个数组对象中的每个对像
   它持有的仍然是reference
   3>String[] s = {new String(),new String(),new String(),...};[list=]
   //这是一种比较特殊的初始化方法,它在声明的时候就已经给每个数组对象赋值,并且数组的大小是由创建了多少个对象而决定的;
   4>String[] s ;
   s = (new String(),new String(),new String(),...);
   //结合1>,3>
  
  JAVA数组的fill(填充):
   JAVA的基本类库中提供了一个Arrays的类,专门对JAVA的数组进行一些基本操作,对数组的fill也是使用它,如下:
   1>//把s的所有元素赋值为指向"test".也就是指向了同一对象.
   String[] s = new String[10];

   Arrays.fill(s,new String("test"));//参数一是,要填充的array,二是要用于填充的对象
   2>//唯一区别在于,参数二三.二是指定从何处开始填充(此索引包含在填充范围内),三是,填充到什么位置
   (此索引不包含在填充范围内)
   String[] s = new String[10];
   Arrays.fill(s,0,s.length,new String("test"));
  
  JAVA数组的比较:
   JAVA的比较有三种:
   1>直接使用"=="比较,这种比较只是比较reference,比如:
   String[] s = new String[10];
   String[] s1 = new String[10];
   System.out.println(s==s1);//false
   s = s1;
   System.out.println(s==s1);//true
   结果我已经说了,原因是,"=="只是比较reference,而第一次比较s和s1指向的是不同的数组对象,理所当然是false,
   后面我把s1的reference给了s,再进行比较就是true了,原理一样.
   2>使用数组对象的equals()方法进行比较,但遗憾的是它也是只是比较reference,因为,从Object继承下来的equals()默认就是比较
   reference的,由此可见,数组对象并未覆写该方法(但JAVA的其他大多数类都覆写了该方法,所以,你可以放心的使用):
   String[] s = new String[10];
   String[] s1 = new String[10];
   System.out.println(s.equals(s1));//false
   s = s1;
   System.out.println(s.queals(s1));//true
   原理同上
   3>最后就是使用JAVA提供的Arrays类的equals()方法来比较两个数组对象,如下:
   String[] s = new String[10];
   String[] s1 = new String[10];
   System.out.println(Arrays.equals(s,s1));
   Arrays.equals()方法的实现是这样的:
   //该方法的实现只是其重载函数种的一种,还有一些是primitives
   public static boolean equals(Object o1,Object o2){
   if(o1.length == o2.length){
   for(int i=0;i   if(o1[i]!=o2[i])
   return false;
   }
   return true;
   }
   return false;
   }
   String[] s = new String[10];
   Object[] d = new Object[10];
   String[] s1= new String[12];
  
   A:>//此处输出是true,因为,他们每一个都指向null
   System.out.println(Arrays.equals(s, d));
   B:>//输出false,因为,length不等
   System.out.println(Arrays.equals(s1, d));
   ---------------------------------------------
   for(int i=0;i   s[i] = new String("something");
   C:>//输出false,因为,经过for的赋值之后,s的每个元素都指向不同的对象,而d的每个元素仍然指向null
   System.out.println(Arrays.equals(s, d));
  
  JAVA数组的排序:
   JAVA数组的排序,是使用Arrays.sort()进行的.
   在这里还必须提到两个interface.一个是Comparable,另一个是Comparator.
   先说第一个:
   实现Comparable接口使某个class具有比较能力,它有一个方法叫:compareTo(Object o);如果,o大返回负整数,o小返回正整数,等于
   返回0;你一但实现了这个接口你就要负责你所比较的含义.
   第二个:
   一个实现了Comparator接口的类可以,作为Arrays.sort()的第二个参数和接下来要讲到的Arrays.binarySearch()方法的最后一个参数
   这样排序时候的比较就是使用Comparator接口定义的比较方法进行的.
   Comparator接口有两个方法compare(Object o1,Object o2)和equals(Object o),一般我们只要实现compare()就可以了,因为
   ,Object中就已经帮我们实现了equals(),Bruce Eckel说除非你有效率的考虑而要去实现equals().compare()的返回值与
   compareTo()一样.
  
   言归正传,Arrays.sort()有两种调用方式:
   1>//这种情况下,如果Test这个类实现了Comparable接口,那么就使用compareTo()方法作为排序的比较算法.
   //如果,没有实现就才用Arrays中自己定义的比较算法
   Test[] s = new Test[10];
   for(int i=0;i   s[i] = new Test("something");
   Arrays.sort(s);
   2>//我们假定Comp类实现了Comparator接口
   //这样的调用就是使用Comp中实现的compare()方法作为排序的比较算法.
   Comp c = new Comp();
   Test[] s = new Test[10];
   for(int i=0;i   s[i] = new Test("something");
   Arrays.sort(s,c);
  
  JAVA数组的复制:
   JAVA数组的复制是使用System.arraycopy()这个方法实现的,使用如下:
  
   String[] s = new String[10];
   String[] s1 = new String[20];
  
   for(int i=0;i   s[i] = new String("test" + (new Integer(i)).toString);
   s1[i] = new String("test" + (new Integer(i+100)).toString);
   System.out.print(s1[i] + " ");
   if(i == s.length-1)
   System.out.println(s1[i]);
   }
  
   System.arraycopy(s,0,s1,10,s.length);
  
   for(int i=0;i   System.out.print(s1[i] + " ");
   if(i == s1.length-1)
   System.out.println(s1[i]);
   }
   参数1:拷贝源array
   参数2:拷贝源的起始拷贝位置(拷贝偏移量)
   参数3:拷贝目的array
   参数4:拷贝目的的起始接收位置(接收偏移量)
   参数5:要拷贝的元素个数(如果,越界将引发异常)
  
  JAVA数组的查找:
   查找使用Arrays.binarySearch(),使用方法如下:
   注意:
   如果你要查找的值,在数组中存在多个时,你在使用binarySearch()之前必须对其进行排序
   如果不然,结果不可预料,也就是你所找到的位置不一定的数组中第一次出现的该值位置.
   1>//在数组对象s中查找"test",如果找到则返回"test"的下标位置,如果,没找到
   String[] s = new String[10];
   for(int i=0;i   s[i] = new String("test");
   Arrays.sort(s);
   System.out.println("\"test\" 在数组s中的下标是" + Arrays.binarySearch(s,"test") + "\n 其值是" +
   s[Arrays.binarySearch(s,"test")]);
  
   2>//如果,在对某个数组排序的时候使用了某个Comparator,那么在对其进行查找的时候也必须使用那个Comparator.
   Comp c = new Comp();
   String[] s = new String[10];
   for(int i=0;i   s[i] = new String("test");
   Arrays.sort(s,c);
   System.out.println("\"test\" 在数组s中的下标是" + Arrays.binarySearch(s,"test",c) + "\n 其值是" +
   s[Arrays.binarySearch(s,"test",c)]);
  
 
  对数组查找的补充:
  如果使用 Arrays.binarySearch()未找到匹配的元素,那么就返回一个负整数,这个数据是,该查找的元素要安插在这个array中的索引位置.具体请查看JDK
分享到:
评论

相关推荐

    Java基础复习day03数组

    Java基础复习day03数组 Java数组是一种数据类型,引用类型,用于存放一组数据的数据结构。数组的定义、创建、访问、长度属性、遍历、常用Arrays类、二维数组、方法递归调用经典案例、变量源码教程等。 一、数组的...

    优质java课件 java程序设计教程(第6版)07.数组复习(共19页).ppt

    Java语言中的数组是一种重要的数据结构,它允许存储同类型的多个数据项。在Java程序设计教程(第6版)中,数组被深入地讲解,包括数组的创建、使用以及作为参数传递。 1. **数组作为参数**: - 在Java中,数组名...

    优质java课件 java程序设计教程(第6版)04.类的复习(共9页).ppt

    本章为该课程的其中一个章节 【全部课程列表】 01.计算机系统概述(共42页).ppt 02.数据与表达式(共62页).ppt ...07.数组复习(共19页).ppt 08.继承(共14页).ppt 09.多态性(共41页).ppt 10.异常(共56页).ppt

    数组-复习知识点.c

    数组-复习知识点.c

    C语言第七章数组部分复习题.doc

    C语言第七章数组部分复习题

    c++输入输出语句与数组函数复习

    这些实验涵盖了C++的基础知识,包括基本输入输出操作、变量定义、数组的使用、循环结构、条件判断、函数定义与调用、以及字符串处理。通过这样的练习,可以帮助开发者熟练掌握C++的基本语法和编程技巧。在实际编程中...

    C语言第五篇数组部分复习题.doc

    【C语言第五篇数组部分复习题】 C语言中的数组是一种数据结构,用于存储同一类型的数据集合。本复习题主要涵盖数组的基本概念、定义、初始化、访问以及数组操作相关的知识点。 1. 数组索引从0开始,因此在给定的...

    数组指针函数复习.cpp

    数组指针函数复习.cpp

    C语言数组练习及复习资料.doc

    C语言数组练习及复习资料 通过分析给定的文件信息,我们可以总结出以下知识点: 数组的基本概念 * 数组的大小是固定的,但所有数组元素的类型必须一样(题目1) * 数组的元素类型可以是整型、字符型、浮点型等,...

    优质java课件 java程序设计教程(第6版)08.继承(共14页).ppt

    数组复习(共19页).ppt 优质java课件 java程序设计教程(第6版)08.继承(共14页).ppt 优质java课件 java程序设计教程(第6版)09.多态性(共41页).ppt 优质java课件 java程序设计教程(第6版)10.异常(共56页)...

    数据结构基础-数组、链表语法基础复习.pdf

    总结来看,本文件系统地复习了数组和链表的基本概念、语法定义以及它们在数据结构中的应用。通过复习这些基础内容,可以帮助初学者更好地理解数组和链表的特性和使用场景,为进一步学习复杂的数据结构和算法打下坚实...

    集思广益话复习 共谋良策促提升—五数组上学期复习活动总结.docx

    【教育】领域的这篇文档主要讲述了新郑市新华路小学与华南城第一小学的五数组教师在上学期复习活动中的合作与总结。这次活动的核心在于集思广益,共同探讨提高复习课教学质量的方法,以促进学生的学习提升。 1. **...

    20221129-数组基本概念复习和应用.rar

    这篇复习材料将深入探讨数组的基本概念及其应用,帮助你巩固和深化对数组的理解。 数组是一种线性数据结构,它由相同类型的数据元素组成,并按照特定顺序存储在连续的内存空间中。数组的每个元素都有一个唯一的索引...

    Java程序设计基础:一维数组应用数组作为方法形参.pptx

    复习:方法定义的语法 数组作为方法的形参 修饰符 返回值类型 方法名(参数列表){ //方法体 } 基本类型 引用类型 基本类型 引用类型 任务:编写方法实现下列一维数组的基本操作 数组作为方法的形参 任务1、使用...

    C语言复习题数组.pdf

    【C语言复习题数组】 数组是C语言中的基础数据结构,用于存储同类型的数据集合。在C语言中,数组的长度在编译时必须是已知的,这意味着不能动态地改变数组的大小。 1. 填空题: - `strlen(a)` 函数返回字符串的...

    05_javase复习总结之数组

    ### 05_javase复习总结之数组 #### 数组定义和基本用法 在Java中,数组是一种基本的数据结构,用于存储固定大小的同类型元素集合。它提供了高效的访问和管理这些元素的方式。 ##### 数组声明与初始化 1. **声明...

    数组与指针复习与习题PPT学习教案.pptx

    数组与指针复习与习题PPT学习教案.pptx

    oc中数组排序

    本篇将深入探讨OC中数组的排序方法,以及如何通过实践来复习这个重要概念。 一、NSArray与NSMutableArray 在Objective-C中,数组分为不可变类型NSArray和可变类型NSMutableArray。NSArray不支持直接修改其内容,...

Global site tag (gtag.js) - Google Analytics