论坛首页 入门技术论坛

数组知识点回顾三

浏览 1556 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-08-27  
  • 数组知识点回顾之哈希表:

 

 1、 数组中元素存放位置存在的问题:

  在一般数组中,元素在数组中的索引位置是随机的,元素的取值和元素的位置之间不存在确定的关系,因此,在数组中查找特定位置的时,需要把查找的值和一系列元素进行比较。

  导致的结果:

  由于这列查找方法建立在“比较”的基础之上,查找的效率以来与查找过程中所进行的比较的次数。

 

  2、哈希表的由来:

  如果数组元素的值value和它在数组中的索引index有一个确定的对应关系hash(value):

  index = hash(value);

  那么对于给定的值,只要调用以上的hash(value)方法,就能找到数组中取值为value的元素的位置。如果数组中的元素的值和位置存在确定的对应关系,这样的数组成为哈希表。

  这种数组的优点:能够提高查找数据的效率。

 

  3、哈希码:hash()方法的返回值也称为元素的哈希码。

 

  4、哈希冲突:多个元素具有相同的哈希码的情况,称为hash冲突。

 

  5、为什么不能直接把哈希码作为元素的位置?

  为了解决hash冲突,保证每个元素具有不同的位置。

 

  • 数组知识点回顾之数组使用类:Arrays()在java.util包中,有一个用于操纵数组的使用类:java.util.Arrays。它提供了一系列的静态方法。

 

  1. euqals():比较两个数组是否相同,只有当两个数组的元素数目相同,对应位置上的元素相同的时候(元素的类型和内容相同),才表明数组相同。
  2. 代码:
  3. package fifthsection;
    
    import java.util.Arrays;
    
    public class TestClassArrays {
    	
    	public static void main(String[] args) {
    		
    		//Arrays类比较两个数组是否相同
    		//数据类型
    		int[] a = new int[]{1,2,3};
    		int[] b = new int[]{1,2,3};
    		System.out.println("数组a是否等于数组b: "+Arrays.equals(a, b));
    		System.out.println("----------------------------------");
    		
    		//对象类型
    		String str1 = new String("魏东");
    		String str2 = new String("魏东");
    		String[] str11 = new String[1];
    		String[] str22 = new String[1];
    		str11[0] = str1;
    		str22[0] = str2;
    		System.out.println("数组str11是否等于数组str22: "+Arrays.equals(str11, str22));
    		/*
    		 * 结论:
    		 * 对于实用数组类Arrays的比较两个数组是否相同,1、只要两个数组中的元素的数目相同,
    		 * 2、对应位置上的元素相同(对应位置上的元素的类型和内容相同)
    		 */
    		
    
    	}
    
    }
    
     
  4. sort():把数组中的元素按升序排序。如果数组中的元素为引用类型,则会采用自然排序方式。
  5. binarySerach():按二叉查找算法,查找数组中值与给定数据相同的元素的位置(如果一个数组中有多个相同元素时,那么返回这个元素最后一个出现的索引)。返回int类型的数据;在调用这个方法的时候必须保证数组中的元素已经按照升序排列,这样才能得到正确的结果。
  6. toString():返回包含数组中所有元素信息的字符串。
  7. fill(xx类型数组,变量值):把xx类型数组中的所有元素的值设置为变量值。
  8. 代码:
  9. package fifthsection;
    
    import java.util.Arrays;
    
    /*
     * 演示了Arrays类的用法
     */
    public class ArraysTester {
    	//用Arrays类操纵字符串数组
    	public void testStringArray() {
    		String[] str1 = new String[]{"Tom1","Jack","Mike","Marry","Tom2"};
    		String[] str2 = new String[]{"Tom1","Jack","Mike","Marry","Tom2"};
    		System.out.println("str1是否和str2相等:"+Arrays.equals(str1, str2));
    		
    		Arrays.sort(str1);
    		System.out.println("排序后str1是否和str2相等:"+Arrays.equals(str1, str2));
    		
    		System.out.println("Jack在str1数组中的位置:"+Arrays.binarySearch(str1, "Jack"));
    		System.out.println("Jack在str2数组中的位置:"+Arrays.binarySearch(str2, "Jack"));
    		
    		System.out.println("str1:"+Arrays.toString(str1));
    		System.out.println("str2:"+Arrays.toString(str2));
    	}
    	
    	//用Arrays类操纵int类型的数组
    	public void testIntArray() {
    		int[] a1 = new int[5],a2 = new int[5],a3 = {4,5,6,3,9,4,4};
    		Arrays.fill(a1, 100);
    		/*
    		 * 把a1数组中的内容拷贝到a2数组中
    		 */
    		System.arraycopy(a1, 0, a2, 0, a1.length);
    		System.out.println("a1是否和a2相等:"+Arrays.equals(a1, a2));
    		
    		Arrays.sort(a3);
    		System.out.println("5在数组a3中的位置:"+Arrays.binarySearch(a3, 5));
    		System.out.println("4在数组a3中的位置:"+Arrays.binarySearch(a3, 4));
    		
    		System.out.println("数组a1:"+Arrays.toString(a1));
    		System.out.println("数组a2:"+Arrays.toString(a2));
    		System.out.println("数组a3:"+Arrays.toString(a3));
    	}
    	
    	//main()入口
    	public static void main(String[] args) {
    		ArraysTester at = new ArraysTester();
    		at.testStringArray();
    		at.testIntArray();
    	}
    }
    
    
  10. System类的arraycopy()静态方法有如下定义:
  11.  arraycopy(Object src,int src_postion,Object dst,int dst_postion,int length)
  12. 以上src指定源数组,参数src_postion指定从远数组中开始拷贝的位置,参数dst指定目标数组,参数dst_postion指定向目标数组中拷贝的起始位置,参数length指定所要拷贝的元素的数目。
  13. 以上知识点在上一个代码中应用

 

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics