Java ¿ìËÙÈëÃÅÁ·Ï°(5)

2019-04-16 20:59

}

˼¿¼Ò»Ï£¬ÈýάÒÔÉϵÄÊý×éʹÓÃfor-eachµÄ·½Ê½ÈçºÎ´æÈ¡£¿

ʵÑé5.4.17: (W)µ÷ÕûÊý×é´óС

ÔÚjavaÖУ¬Êý×é²»Äܶ¯Ì¬µ÷ÕûÆä´óС¡£µ÷ÕûÊý×é´óСµÄÒ»ÖÖ·½·¨ÊÇʹÓÃjava.util.ArrayList£¨»òÕßjava.util.Vetor£©´úÌæÔ­ÓеÄÊý×飻ÁíÒ»¸ö½â¾ö·½°¸¾ÍÊǽ¨Á¢Ò»¸öеÄÊý×鲢ΪÆä·ÖÅä¿Õ¼ä£¬È»ºó°ÑÔ­À´Êý×éµÄÄÚÈÝ¿½±´µ½ÐÂÊý×éÖÐÈ¥, ¼ûResizeArray.java£¨·¶Àý5-12£©¡£

³ÌÐòÇåµ¥5-12£ºResizeArray.java

public class ResizeArray { /** * Ϊһ¸öÐÂÊý×é·ÖÅäпռ䣬²¢½«Ô­À´Êý×éµÄÄÚÈÝ¿½±´µ½ÐÂÊý×éÖÐÈ¥ * @param oldArray the old array, to be reallocated. Ô­À´µÄÊý×飬½«±»ÖØÐ·ÖÅä¿Õ¼ä * @param newSize the new array size.ÐÂÊý×éµÄ´óС * @return A new array with the same contents. ´æ·ÅÔ­À´Êý×éÄÚÈݵÄÐÂÊý×é */ private static Object resizeArray (Object oldArray, int newSize) { int oldSize = java.lang.reflect.Array.getLength(oldArray); Class elementType = oldArray.getClass().getComponentType(); Object newArray = java.lang.reflect.Array.newInstance( elementType,newSize); int preserveLength = Math.min(oldSize,newSize); if (preserveLength > 0) System.arraycopy (oldArray,0,newArray,0,preserveLength); return newArray; } /** * Ϊһ¸ö¶þάÊý×é·ÖÅäпռ䣬²¢½«Ô­À´Êý×éµÄÄÚÈÝ¿½±´µ½ÐÂÊý×éÖÐÈ¥ * @param oldArray the old array, to be reallocated. * @param newRowSize row size of the new array * @param newColumnSize column size of the new array. * @return A new array */ private static Object resize2DArray (Object old2DArray, int newRowSize, int newColumnSize) { return null; // replace the code } public static void main (String[] args) { int[] testArray = {1,2,3}; testArray = (int[])resizeArray(testArray,5);

21

/* */ }

}

testArray [3] = 4; testArray [4] = 5;

for (int element : testArray) System.out.print (element + \ System.out.println(\

int test2DArray[][] = {{1,2,3},{4,5,6}};

test2DArray = (int[][])resize2DArray(test2DArray,5,10); for (int[] row : test2DArray ) { for ( int element : row ) System.out.print(element + \ System.out.println(); }

ÔÚResizeArray.javaÖÐÌí¼ÓÒ»¸öз½·¨£¬µ÷Õû¶þάÊý×é´óС£¬¸Ã·½·¨µÄÉùÃ÷ÈçÏ£º

private static Object resize2DArray (Object old2DArray, int newRowSize, int newColumnSize)

JavaÖеĶþάÊý×é±»¿´×÷ÊÇÊý×éµÄÊý×é¡£Òª¸ø¶þάÊý×é·ÖÅä¿Õ¼ä£¬µÚһάÊý×é¼°ÆäǶÌ×µÄÊý×é¶¼½«ÒªÓõ½resizeArrayº¯Êý¡£È¥µômain·½·¨ÖеÄ×¢ÊÍ£¬²âÊÔÐµķ½·¨¡£

ʵÑé5.4.18: (I)java.lang.reflect.ArrayÀà

ÒÔϵĴúÂëÆ¬¶Î³öÏÖÔÚResizeArray.java£¨¼û´úÂëÇåµ¥5-12£©µÄresizeArray()·½·¨ÖС£

int oldSize = java.lang.reflect.Array.getLength(oldArray);

Class elementType = oldArray.getClass().getComponentType();

Object newArray = java.lang.reflect.Array.newInstance(elementType, newSize);

ResizeArray.javaÔËÓÃÁËjava.lang.reflect.ArrayÀà¡£Õâ¸öArrayÀàÌṩÁ˶¯Ì¬´´½¨ºÍ·ÃÎÊJavaÊý×éµÄstatic·½·¨£¬Èç±í5-1Ëùʾ¡£³ÌÐòÊ×Ïȵ÷ÓÃArrayÀàµÄgetLength()·½·¨µÃµ½Ô­ÓÐÊý×éµÄ³¤¶È£¬È»ºóµ÷ÓÃObjectÀàµÄgetClass()·½·¨µÃµ½´ËÊý×é¶ÔÏóµÄÒ»¸öÔËÐÐʱÀ࣬µ÷ÓÃClassÀàµÄgetComponentType()·½·¨µÃµ½Êý×é¶ÔÏóµÄÀàÐÍ£¬×îºóµ÷ÓÃArrayÀàµÄnewInstance()·½·¨´´½¨Ò»¸öеÄÊý×é¡£

±í5-1 java.lang.reflect.ArrayÀà³£Óõö·½·¨¼òµ¥ËµÃ÷ Ãû ³Æ ˵ Ã÷ Object get(Object array, int index) int getLength(Object array) void set(Object array, int index, Object value) Object newInstance(Class componentType, int length) ·µ»ØÖ¸¶¨Êý×é¶ÔÏóÖÐË÷Òý×é¼þµÄÖµ ÒÔ int ÐÎʽ·µ»ØÖ¸¶¨Êý×é¶ÔÏóµÄ³¤¶È ½«Ö¸¶¨Êý×é¶ÔÏóÖÐË÷Òý×é¼þµÄÖµÉèÖÃΪָ¶¨µÄÐÂÖµ¡£ ´´½¨Ò»¸ö¾ßÓÐÖ¸¶¨µÄ×é¼þÀàÐͺͳ¤¶ÈµÄÐÂÊý×é¡£ ³ÌÐòÖÐʹÓÃÁËArrayÀàµÄÈ«Ãûjava.lang.reflect.Array£¬¼´°üÃû+ÀàÃûµÄÐÎʽ¡£ÔÚ±àд´úÂëʱ£¬¸ü³£

22

¼ûµÄ×ö·¨ÔòÊÇ£ºÔÚÔ´Îļþ¶¥²¿Ê¹ÓÃimportµ¼Èë³ÌÐòËùÐèÀ࣬ÔÚ³ÌÐòÖÐÖ±½ÓʹÓÃÀàµÄ¼òµ¥Ãû¡£ÕâÑù×öµÄºÃ´¦ÊDz»ÐèÒªÔÚʹÓÃArrayµÄµØ·½¶¼Ê¹ÓÃÈ«Ãû£¬Ê¹´úÂë¸ü¼ò½à¡£

ÐÞ¸ÄResizeArray.java³ÌÐò£¬ÔÚ³ÌÐòÖÐʹÓÃÀàµÄ¼òµ¥Ãû¡£

Reflection API ²»½öÌṩÁ˶¯Ì¬´´½¨ºÍ·ÃÎÊÊý×éµÄjava.lang.reflect.ArrayÀ࣬»¹Ö§³Ö³ÌÐòÔËÐÐʱ¶¯Ì¬¼ÓÔØÄ³¸öÀ࣬²¢Í¨¹ýÃû³ÆÀ´µÃµ½¶ÔÏó£¨À࣬ÊôÐÔ£¬·½·¨£©¡£

ÏÂÃæµÄÀý×ÓÈôó¼Ò¸üÖ±¹ÛµØÁ˽ⷴÉäµÄʹÓ÷½·¨£º

// ͨ¹ýÀàÃûÀ´Éú³ÉÒ»¸öÀàµÄʵÀý£º

Class cls_str = Class.forName( \Object str = cls_str.newInstance();

// ͨ¹ý·½·¨ÃûÀ´µ÷ÓÃÒ»¸ö·½·¨£º String methodName = \

Method m = cls_str.getMethod(methodName, null ); System.out.println( \

Õâ¸öÀý×ÓÆäʵ¿ÉÒÔÓøü¼òµ¥µÄ·½Ê½Ð´³öÀ´£º String str = new String();

System.out.println(str.length());

¿´µ½ÉÏÃæµÄÀý×ÓÓÐÈË»áÎÊ£ºÎªÊ²Ã´ÒªÕâôÂ鷳Ĩ£¿±¾À´Ò»ÌõÓï¾ä¾ÍÍê³ÉµÄÊÂÇé¸ÉÂðҪдÕâô¸´ÔÓ£¿Ã»´í£¬ÔÚÉÏÃæµÄÀý×ÓÖÐȷʵûÓбØÒªÕâôÂé·³¡£²»¹ýÏëÏóÕâÑùÒ»¸öÓ¦ÓóÌÐò£¬ËüÖ§³Ö¶¯Ì¬µÄ¹¦ÄÜÀ©Õ¹£¬Ò²¾ÍÊÇ˵³ÌÐò²»ÖØÐÂÆô¶¯¾Í¿ÉÒÔ×Ô¶¯¼ÓÔØÐµĹ¦ÄÜ£¬Õâ¸ö¹¦ÄÜÊÇʹÓÃÒ»¸ö¾ßÌåÀàÀ´±íʾµÄ¡£Èç¹ûÎÒÃÇÖªµÀÀàµÄÀàÃû£¬±ÈÈçÊÇ test.NewFunction £¬°ÑÕâ¸öÀàÃû ( ×Ö·û´® ) ¸æËßÓ¦ÓóÌÐòºó£¬Ëü¾Í¿ÉÒÔʹÓõÚÒ»¸öÀý×ӵķ½·¨À´¼ÓÔØ²¢ÆôÓÃÐµĹ¦ÄÜ¡£Õâ¾ÍÊÇÀàµÄ·´Éä¡£

½« Java µÄ·´É䣨reflection£©¼¼ÊõÓ¦Óõ½³ÌÐòÉè¼ÆÖУ¬¿ÉÒÔ´ó´óµØÌá¸ß³ÌÐòµÄÖÇÄÜ»¯ºÍ¿ÉÀ©Õ¹ÐÔ¡£¾¡¹Ü·´Éä¼¼ÊõºÜÇ¿´ó£¬µ«ËüµÄȱµãÒ²ÊÇÏÔ¶øÒ×¼ûµÄ¡£

1£® ÓÉÓÚ·´ÉäÉæ¼°Àà/¶ÔÏóµÄ¶¯Ì¬²Ù×÷£¬ÐéÄâ»úÎÞ·¨°ïÖúÆäʵÏÖÐÔÄÜÓÅ»¯£¬Òò¶øÐÔÄÜ¿ªÏú´ó£¨ÄÚ´æ

Õ¼Óö࣬ÔËÐÐËÙ¶ÈÂý£©¡£ÓÐʵÑé±íÃ÷£¬°²×°ÁËJDK1.5¡¢ÄÚ´æ512G¡¢2.4GHz Pentium 4µÄ¼ÆËã»úÔËÐз´Éä´úÂëµÄËٶȱȴ«Í³´úÂëÂý50±¶¡£Òò´Ë¶ÔÓÚÐÔÄÜÒªÇó¸ßµÄ³ÌÐòÒª±ÜÃâʹÓ÷´Éä¼¼Êõ¡£

2£® ·´ÉäÒªÇó³ÌÐò¾ß±¸ÏàÓ¦µÄȨÏÞ£¬¶øAppletµÈ³ÌÐò¿ÉÄÜÒòΪ²»¾ß±¸ÏàӦȨÏÞ¶øÎÞ·¨Ö´ÐС£ 3£® ·´ÉäÔÊÐí·ÃÎÊһЩ˽ÓеÄ×ֶκͷ½·¨£¬´Ó¶ø´øÀ´Ò»Ð©¸±×÷Óá£

Ö´ÐÐReflectDemo.java£¨·¶Àý5-13£©£¬¿ØÖÆÌ¨½«¸ù¾ÝÓû§ÊäÈëµÄjavaÀàµÄÈ«ÃûÊä³ö¸ÃÀàµÄËùÓз½·¨¡£

³ÌÐòÇåµ¥5-13£ºReflectDemo.java import java.io.*;

import java.lang.reflect.*; public class ReflectDemo { public static void main(String args[]) {

23

}

}

try { BufferedReader readIn = new BufferedReader( new InputStreamReader(System.in)); System.out.println(\ÊäÈëÒ»¸öJavaÀàµÄÈ«Ãû£¨È磺java.lang.Integer£©£º\ Class c = Class.forName(readIn.readLine()); Method m[] = c.getDeclaredMethods(); for (int i = 0; i < m.length; i++) System.out.println(m[i].toString()); } catch (Throwable e) { System.err.println(e); }

±àд³ÌÐòMyReflectDemo.java£¬¸ù¾ÝÓû§ÊäÈëµÄÀàÃû£¬¿ØÖÆÌ¨Êä³ö¸ÃÀàµÄËùÓÐ×ֶΣ¨fields£©¡¢¹¹Ôì·½·¨£¨constructor£©ºÍ·½·¨£¨method£©£¬°üjava.lang.reflectÖаüº¬ÁËÒªÓõ½µÄAPI¡£Á·Ï°Ê¹ÓÃfor-eachÑ­»·¡£

ʵÑé5.4.19: (D)ArraysÀàµÄʹÓÃ

¶ÔÊý×éµÄһЩ»ù±¾²Ù×÷£¬ÈçÅÅÐò¡¢ËÑË÷Óë±È½ÏµÈÊǺܳ£¼ûµÄ¡£ÔÚJavaÖÐÌṩÁËArraysÀàЭÖúÕ⼸¸ö²Ù×÷¡£ArraysÀàλÓÚjava.util°üÖУ¬ËüÌṩÁËһЩ·½·¨¿ÉÒÔÖ±½ÓʹÓã¬Èç±í5-2Ëùʾ¡£

±í5-2 ArraysÀà³£Óõö·½·¨¼òµ¥ËµÃ÷

Ãû ³Æ sort() binarySearch() fill() equals()

˵ Ã÷ ʹÓÿìËÙÅÅÐò·¨£¨Quick Sort£©¶ÔÖ¸¶¨µÄÊý×éÅÅÐò ¶ÔÒÑÅÅÐòµÄÊý×é½øÐжþÔªËÑË÷£¬Èç¹ûÕÒµ½Ö¸¶¨µÄÖµ¾Í·µ»Ø¸ÃÖµËùÔÚµÄË÷Òý£¬·ñÔò¾Í·µ»Ø¸ºÖµ ¹¹ÔìÒ»¸öÊý×éÖ®ºó£¬»áÒÀÊý¾ÝÀàÐ͸ø¶¨Ä¬ÈÏÖµ£¬ÀýÈçÕûÊýÊý×é³õʼ»¯Îª 0¡£Ê¹ÓÃArrays.fill()·½·¨¿ÉÒÔ½«ËùÓеÄÔªËØÉ趨Ϊָ¶¨Öµ ±È½ÏÁ½¸öÊý×éÖеÄÔªËØÖµÊÇ·ñÈ«²¿ÏàµÈ£¬Èç¹ûÊǽ«·µ»Øtrue£¬·ñÔò·µ»Ø false ArraysMethodDemo1.java£¨·¶Àý5-14£©Ê¹ÓÃÁËArraysÀàµÄsortºÍbinarySearch·½·¨À´½øÐÐÊý×éµÄÅÅÐòÓëËÑË÷¡£ArraysMethodDemo2.java£¨·¶Àý5-15£©Ê¹ÓÃÁËArraysÀàµÄfillºÍequals·½·¨À´½øÐÐÊý×éµÄÌî³äÓë±È½Ï¡£ ?

³ÌÐòÇåµ¥5-14£ºArraysMethodDemo1.java import java.util.Scanner;

import java.util.Arrays;

public class ArraysMethodDemo1 { public static void main(String[] args) {

24

Scanner scanner = new Scanner(System.in); int[] arr = {93, 5, 3, 55, 57, 7, 2 ,73, 41, 91}; System.out.print(\ÅÅÐòǰ: \ for(int i = 0; i < arr.length; i++) System.out.print(arr[i] + \ System.out.println(); Arrays.sort(arr); System.out.print(\ÅÅÐòºó: \ for(int i = 0; i < arr.length; i++) System.out.print(arr[i] + \ System.out.print(\ÇëÊäÈëËÑË÷Öµ: \ int key = scanner.nextInt(); int find = -1; if((find = Arrays.binarySearch(arr, key)) > -1) { System.out.println(\ÕÒµ½ÖµÓÚË÷Òý \λÖÃ\ } else System.out.println(\ÕÒ²»µ½Ö¸¶¨Öµ\ }

} // ArraysMethodDemo1 Ö´Ðнá¹û£º

ÅÅÐòǰ: 93 5 3 55 57 7 2 73 41 91 ÅÅÐòºó: 2 3 5 7 41 55 57 73 91 93 ÇëÊäÈëËÑË÷Öµ: 7

ÕÒµ½ÖµÓÚË÷Òý 3 λÖà ³ÌÐòÇåµ¥5-15£ºArraysMethodDemo2.java import java.util.Arrays;

public class ArraysMethodDemo2 {

public static void main(String[] args) { int[] arr1 = new int[10]; int[] arr2 = new int[10]; int[] arr3 = new int[10];

Arrays.fill(arr1, 5); Arrays.fill(arr2, 5); Arrays.fill(arr3, 10);

25

System.out.print(\

for(int i = 0; i < arr1.length; i++) System.out.print(arr1[i] + \

System.out.println(\

Arrays.equals(arr1, arr2)); System.out.println(\

Arrays.equals(arr1, arr3)); } }

Ö´Ðнá¹û£º

arr1: 5 5 5 5 5 5 5 5 5 5 arr1 = arr2 ? true arr1 = arr3 ? false

ÔÚJava SE 5.0ÖжÔArraysÀà×÷Á˲»ÉÙµÄÐÞ¸ÄÓ빦ÄÜÔö¼Ó£¬Óɴ˿ɼûÊý×é²Ù×÷ÔÚ³ÌÐòÖеÄÖØÒªÐÔ¡£ ×ÜÖ®£¬Èç¹û֮ǰ¶ÔArraysûÕâôµÄÖØÊÓ£¬ÔÚJ2SE 5.0Ö®ºó£¬¿ÉÒÔ¶à¹ØÕÕËü¼¸ÑÛ¡£Èç¹ûÓÐÊý×é²Ù×÷·½ÃæµÄÏà¹ØÐèÇ󣬿ÉÒÔÏȲé²é java.util.ArraysµÄAPIÎļþ˵Ã÷£¬¿´¿´ÓÐûÓÐÏֳɵķ½·¨¿ÉÒÔʹÓá£ÏÔÈ»Arrays²¢²»Ö»ÓÐÒÔÉϽéÉܵÄÄÇЩ·½·¨£¬ÇëÁгöArraysÀàµÄÁíÍâÎå¸ö·½·¨£º

1£®_________________________________________________ 2£®_________________________________________________ 3£®_________________________________________________ 4£®_________________________________________________ 5£®_________________________________________________

ÔÚArraysMethodDemo1.javaÖÐʹÓÃÁËÒ»¸öjava.util.ScannerÀ࣬ÕâÊÇJava SE 5.0ÒýÈëµÄÒ»¸öеÄÀ࣬ÌṩÁË»ù±¾µÄ¶ÁÈëÊý¾ÝµÄ¹¦ÄÜ£¬¿ÉÒÔ´Ó¿ØÖÆÌ¨»òÈκÎÊý¾ÝÁ÷¶ÁÈ¡Êý¾Ý¡£²éѯJava SE 5.0 API£¬Ñ§Ï°ScannerÀàµÄÓ÷¨¡£

26


Java ¿ìËÙÈëÃÅÁ·Ï°(5).doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ ÏÂÔØÊ§°Ü»òÕßÎĵµ²»ÍêÕû£¬ÇëÁªÏµ¿Í·þÈËÔ±½â¾ö£¡

ÏÂһƪ£º·ÅϱÈÄÃÆðÄÑVSÄÃÆð±È·ÅÏÂÄÑ¡¾»ÆÖ´ÖС¢Ðܺơ¿×¾±Ê¸´ÅÌ

Ïà¹ØÔĶÁ
±¾ÀàÅÅÐÐ
¡Á ×¢²á»áÔ±Ãâ·ÑÏÂÔØ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩

ÂíÉÏ×¢²á»áÔ±

×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£º QQ£º