ææ¡Javaæ°ç»ï¼ä¸ä¸ªéå¸¸ç¹æ®ç对象
âäºå¥ï¼æçä½ å ¬ä¼å·çä¸ç¯æç« éæå°ï¼ArrayList çå 鍿¯ç¨æ°ç»å®ç°çï¼æå°±å¯¹æ°ç»é常æå ´è¶£ï¼æ³æ·±å ¥å°äºè§£ä¸ä¸ï¼ä»å¤©ç»äºå°è¿ä¸ªç¯èäºï¼å¥½æå¾ åï¼âä¸å¦¹çè¯æ°éæ¾å¾å¾å ´å¥ã
âçç¡®æ¯çï¼ç ArrayList çæºç 就䏿¸ äºæ¥äºãâæä¸è¾¹è¯´ï¼ä¸è¾¹æå¼ Intellij IDEAï¼å¹¶æ¾å°äº ArrayList çæºç ã
/**
* The array buffer into which the elements of the ArrayList are stored.
* The capacity of the ArrayList is the length of this array buffer. Any
* empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
* will be expanded to DEFAULT_CAPACITY when the first element is added.
*/
transient Object[] elementData; // non-private to simplify nested class access
/**
* The size of the ArrayList (the number of elements it contains).
*
* @serial
*/
private int size;âç§è§æ²¡ï¼Object[] elementData å°±æ¯æ°ç»ãâææçæ¾ç¤ºå±ä¸è¿ä¸²ä»£ç ç»§ç»è¯´ã
æ°ç»æ¯ä¸ä¸ªå¯¹è±¡ï¼å®å å«äºä¸ç»åºå®æ°éçå ç´ ï¼å¹¶ä¸è¿äºå ç´ çç±»åæ¯ç¸åçãæ°ç»ä¼æç §ç´¢å¼çæ¹å¼å°å ç´ æ¾å¨æå®çä½ç½®ä¸ï¼æå³çæä»¬å¯ä»¥éè¿ç´¢å¼æ¥è®¿é®è¿äºå ç´ ãå¨ Java ä¸ï¼ç´¢å¼æ¯ä» 0 å¼å§çã
âå¥ï¼è½è¯´ä¸ä¸ä¸ºä»ä¹ç´¢å¼ä» 0 å¼å§åï¼âä¸å¦¹çªç¶å¯¹è¿ä¸ªè¯é¢å¾æå ´è¶£ã
âå¦ï¼Java æ¯åºäº C/C++ è¯è¨å®ç°çï¼è C è¯è¨ç䏿 æ¯ä» 0 å¼å§çï¼æä»¥ Java 就继æ¿äºè¿ä¸ªè¯å¥½çä¼ ç»ä¹ æ¯ï¼æçç¼çï¼ãCè¯è¨æä¸ä¸ªå¾éè¦æ¦å¿µï¼å«åæéï¼å®å®é 䏿¯ä¸ä¸ªåç§»éï¼è·ç¦»å¼å§ä½ç½®çåç§»éï¼ç¬¬ä¸ä¸ªå ç´ å°±å¨å¼å§çä½ç½®ï¼å®çåç§»é就为 0ï¼æä»¥ç´¢å¼å°±ä¸º 0ãâæ¤å»ï¼æå¾èªä¿¡ã
âæ¤å¤ï¼è¿æå¦å¤ä¸ç§è¯´æ³ãæ©æçè®¡ç®æºèµæºæ¯è¾å®ä¹ï¼0 ä½ä¸ºèµ·å§ä¸æ ç¸æ¯è¾äº 1 ä½ä¸ºèµ·å§ä¸æ ï¼ç¼è¯çæçæ´é«ãâ
âå¦ãâä¸å¦¹æå³æ·±é¿å°ç¹äºç¹å¤´ã
æä»¬å¯ä»¥å°æ°ç»ç解为ä¸ä¸ªä¸ªæ´é½æåçåå æ ¼ï¼æ¯ä¸ªåå æ ¼éé¢åæ¾çä¸ä¸ªå ç´ ã
æ¯å¦è¯´ä¸å¾ä¸çæ°ç»ï¼å¼ä¸º[a,b,c,a,b,c,b,b]ï¼ä¸æ 便¬¡ä¸º 0ã1ã2ã3ã4ã5ã6ã7ã

æ°ç»å ç´ çç±»åå¯ä»¥æ¯åºæ¬æ°æ®ç±»åï¼æ¯å¦è¯´ intãdoubleï¼ï¼ä¹å¯ä»¥æ¯å¼ç¨æ°æ®ç±»åï¼æ¯å¦è¯´ Stringï¼ï¼å æ¬èªå®ä¹ç±»åã
æ°ç»ç声æä¸åå§å
æ°ç»çå£°ææ¹å¼å两ç§ã
å æ¥ç第ä¸ç§ï¼
int[] anArray;忥ç第äºç§ï¼
int anOtherArray[];ä¸åä¹å¤å°±å¨äºä¸æ¬å·çä½ç½®ï¼æ¯è·å¨ç±»åå ³é®åçåé¢ï¼è¿æ¯è·å¨åéçåç§°çåé¢ãåä¸ç§ç使ç¨é¢çæ´é«ä¸äºï¼å ArrayList çæºç ä¸å°±ç¨äºç¬¬ä¸ç§æ¹å¼ã
åæ ·çï¼æ°ç»çåå§åæ¹å¼ä¹æå¤ç§ï¼æå¸¸è§çæ¯ï¼
int[] anArray = new int[10];çå°æ²¡ï¼ä¸é¢è¿è¡ä»£ç ä¸ä½¿ç¨äº new å ³é®åï¼è¿å°±æå³çæ°ç»çç¡®æ¯ä¸ä¸ªå¯¹è±¡ï¼åªæå¯¹è±¡çå建æä¼ç¨å° new å ³é®åï¼åºæ¬æ°æ®ç±»åæ¯ä¸ç¨çï¼åºæ¬æ°æ®çå è£ ç±»åæ¯å¯ä»¥ new çï¼å è£ ç±»åå°±æ¯å¯¹è±¡ï¼ãç¶åï¼æä»¬éè¦å¨æ¹æ¬å·ä¸æå®æ°ç»çé¿åº¦ã
è¿æ¶åï¼æ°ç»ä¸çæ¯ä¸ªå ç´ é½ä¼è¢«åå§å为é»è®¤å¼ï¼int ç±»åç就为 0ï¼Object ç±»åç就为 nullã ä¸åæ°æ®ç±»åçé»è®¤å¼ä¸åï¼å¯ä»¥åç §ä¹åçæç« ã
å¦å¤ï¼è¿å¯ä»¥ä½¿ç¨å¤§æ¬å·çæ¹å¼ï¼ç´æ¥åå§åæ°ç»ä¸çå ç´ ï¼
int anOtherArray[] = new int[] {1, 2, 3, 4, 5};è¿æ¶åï¼æ°ç»çå ç´ å嫿¯ 1ã2ã3ã4ã5ï¼ç´¢å¼ä¾æ¬¡æ¯ 0ã1ã2ã3ã4ï¼é¿åº¦æ¯ 5ã
æ°ç»çå¸¸ç¨æä½
âå¥ï¼æä¹è®¿é®æ°ç»å¢ï¼âä¸å¦¹åæ¶å°æè¯å°ã
å颿å°è¿ï¼å¯ä»¥éè¿ç´¢å¼æ¥è®¿é®æ°ç»çå ç´ ï¼å°±åä¸é¢è¿æ ·ï¼
anArray[0] = 10;åéåï¼å ä¸ä¸æ¬å·ï¼å ä¸å ç´ çç´¢å¼ï¼å°±å¯ä»¥è®¿é®å°æ°ç»ï¼éè¿â=âæä½ç¬¦å¯ä»¥å¯¹å ç´ è¿è¡èµå¼ã
å¦æç´¢å¼çå¼è¶
åºäºæ°ç»ççéï¼å°±ä¼æåº ArrayIndexOutOfBoundExceptionãç±äºæ°ç»çç´¢å¼æ¯ä» 0 å¼å§ï¼æä»¥æå¤§ç´¢å¼ä¸º length - 1ï¼ä¸è¦ä½¿ç¨è¶
åºè¿ä¸ªèå´å
çç´¢å¼è®¿é®æ°ç»ï¼å¦åå°±ä¼æåºæ°ç»è¶ççå¼å¸¸äºã
æ¯å¦è¯´ä½ 声æäºä¸ä¸ªå¤§å°ä¸º 10 çæ°ç»ï¼ä½ ç¨ç´¢å¼ 10 æ¥è®¿é®æ°ç»ï¼å°±ä¼æåºè¿ä¸ªå¼å¸¸ãå 为æ°ç»çç´¢å¼æ¯ä» 0 å¼å§çï¼æä»¥æ°ç»çæåä¸ä¸ªå
ç´ çç´¢å¼æ¯ length - 1ï¼ä¹å°±æ¯ 9ã
彿°ç»çå ç´ é常å¤çæ¶åï¼éä¸ªè®¿é®æ°ç»å°±å¤ªè¾è¦äºï¼æä»¥éè¦éè¿éåçæ¹å¼ã
第ä¸ç§ï¼ä½¿ç¨ for 循ç¯ï¼
int anOtherArray[] = new int[] {1, 2, 3, 4, 5};
for (int i = 0; i < anOtherArray.length; i++) {
System.out.println(anOtherArray[i]);
}éè¿ length 屿§è·åå°æ°ç»çé¿åº¦ï¼ç¶åä» 0 å¼å§éåï¼å°±å¾å°äºæ°ç»çææå ç´ ã
第äºç§ï¼ä½¿ç¨ for-each 循ç¯ï¼
for (int element : anOtherArray) {
System.out.println(element);
}妿ä¸éè¦å ³å¿ç´¢å¼çè¯ï¼æå³çä¸éè¦ä¿®æ¹æ°ç»çæä¸ªå ç´ ï¼ï¼ä½¿ç¨ for-each éåæ´ç®æ´ä¸äºãå½ç¶ï¼ä¹å¯ä»¥ä½¿ç¨ while å do-while 循ç¯ã
å¯å忰䏿°ç»
å¨ Java ä¸ï¼å¯ååæ°ç¨äºå°ä»»ææ°éçåæ°ä¼ éç»æ¹æ³ï¼æ¥ç varargsMethod() æ¹æ³ï¼
void varargsMethod(String... varargs) {}è¯¥æ¹æ³å¯ä»¥æ¥æ¶ä»»ææ°éçåç¬¦ä¸²åæ°ï¼å¯ä»¥æ¯ 0 个æè N ä¸ªï¼æ¬è´¨ä¸ï¼å¯ååæ°å°±æ¯éè¿æ°ç»å®ç°çã为äºè¯æè¿ä¸ç¹ï¼æä»¬å¯ä»¥çä¸ä¸åç¼è¯ä¸åçåèç ï¼
public class VarargsDemo
{
public VarargsDemo()
{
}
transient void varargsMethod(String as[])
{
}
}æä»¥ï¼æä»¬å ¶å®å¯ä»¥ç´æ¥å°æ°ç»ä½ä¸ºåæ°ä¼ éç»è¯¥æ¹æ³ï¼
VarargsDemo demo = new VarargsDemo();
String[] anArray = new String[] {"æ²é»çäº", "䏿æè¶£çç¨åºå"};
demo.varargsMethod(anArray);ä¹å¯ä»¥ç´æ¥ä¼ éå¤ä¸ªå符串ï¼éè¿éå·éå¼çæ¹å¼ï¼
demo.varargsMethod("æ²é»çäº", "䏿æè¶£çç¨åºå");æ°ç»ä¸ List
å¨ Java ä¸ï¼æ°ç»ä¸ List å ³ç³»é常å¯åãList å°è£ äºå¾å¤å¸¸ç¨çæ¹æ³ï¼æ¹ä¾¿æä»¬å¯¹éåè¿è¡ä¸äºæä½ï¼èå¦æç´æ¥æä½æ°ç»çè¯ï¼æå¾å¤ä¸ä¾¿ï¼å 为æ°ç»æ¬èº«æ²¡ææä¾è¿äºå°è£ 好çæä½ï¼æä»¥ææ¶åæä»¬éè¦ææ°ç»è½¬æ Listã
List ä¼å¨éåæ¡æ¶ä¸è详ç»ä»ç»ï¼è¿éå æ¥ä¸ªå¼èèï¼æ¹ä¾¿å¤§å®¶åå¤´è¿æ¥å¤çã
âæä¹è½¬å¢ï¼âä¸å¦¹é®å°ã
æåå§çæ¹å¼ï¼å°±æ¯éè¿éåæ°ç»çæ¹å¼ï¼ä¸ä¸ªä¸ªå°æ°ç»æ·»å å° List ä¸ã
int[] anArray = new int[] {1, 2, 3, 4, 5};
List<Integer> aList = new ArrayList<>();
for (int element : anArray) {
aList.add(element);
}æ´ä¼é
çæ¹å¼æ¯éè¿ Arrays ç±»ï¼æ³é¾æ¥äºè§£è¯¦æ
ï¼ç asList() æ¹æ³ï¼
List<Integer> aList = Arrays.asList(anArray);ä¸è¿éè¦æ³¨æçæ¯ï¼Arrays.asList çåæ°éè¦æ¯ Integer æ°ç»ï¼è anArray ç®åæ¯ int ç±»åã
å¯ä»¥è¿æ ·åï¼
List<Integer> aList1 = Arrays.asList(1, 2, 3, 4, 5);æè æ¢å¦å¤ä¸ç§æ¹å¼ã
List<Integer> aList = Arrays.stream(anArray).boxed().collect(Collectors.toList());è¿åæ¶åå°äº Java æµçç¥è¯ï¼æ³é¾æ¥äºè§£ã
è¿æä¸ä¸ªéè¦æ³¨æçæ¯ï¼Arrays.asList æ¹æ³è¿åç ArrayList 并䏿¯ java.util.ArrayListï¼å®å
¶å®æ¯ Arrays ç±»çä¸ä¸ªå
é¨ç±»ï¼
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable{}妿éè¦æ·»å å
ç´ æè
å é¤å
ç´ çè¯ï¼éè¦æå®è½¬æ java.util.ArrayListã
new ArrayList<>(Arrays.asList(anArray));Java 8 æ°å¢äº Stream æµçæ¦å¿µï¼è¿å°±æå³çæä»¬ä¹å¯ä»¥å°æ°ç»è½¬æ Stream è¿è¡æä½ã
String[] anArray = new String[] {"æ²é»çäº", "䏿æè¶£çç¨åºå", "好好çéä»"};
Stream<String> aStream = Arrays.stream(anArray);æ°ç»çæåºä¸æ¥æ¾
妿æ³å¯¹æ°ç»è¿è¡æåºçè¯ï¼å¯ä»¥ä½¿ç¨ Arrays ç±»æä¾ç sort() æ¹æ³ã
- åºæ¬æ°æ®ç±»åæç §ååºæå
- å®ç°äº Comparable æ¥å£ç对象æç
§
compareTo()çæåº
æ¥ç第ä¸ä¸ªä¾åï¼
int[] anArray = new int[] {5, 2, 1, 4, 8};
Arrays.sort(anArray);æåºåçç»æå¦ä¸æç¤ºï¼
[1, 2, 4, 5, 8]æ¥ç第äºä¸ªä¾åï¼
String[] yetAnotherArray = new String[] {"A", "E", "Z", "B", "C"};
Arrays.sort(yetAnotherArray, 1, 3,
Comparator.comparing(String::toString).reversed());åªå¯¹ 1-3 ä½ç½®ä¸çå ç´ è¿è¡ååºï¼æä»¥ç»æå¦ä¸æç¤ºï¼
[A, Z, E, B, C]ææ¶åï¼æä»¬éè¦ä»æ°ç»ä¸æ¥æ¾æä¸ªå ·ä½çå ç´ ï¼æç´æ¥çæ¹å¼å°±æ¯éè¿éåçæ¹å¼ï¼
int[] anArray = new int[] {5, 2, 1, 4, 8};
for (int i = 0; i < anArray.length; i++) {
if (anArray[i] == 4) {
System.out.println("æ¾å°äº " + i);
break;
}
}ä¸ä¾ä¸ä»æ°ç»ä¸æ¥è¯¢å ç´ 4ï¼æ¾å°åéè¿ break å ³é®åéåºå¾ªç¯ã
妿æ°ç»æåè¿è¡äºæåºï¼å°±å¯ä»¥ä½¿ç¨äºåæ¥æ¾æ³ï¼è¿æ ·æç就伿´é«ä¸äºãArrays.binarySearch() æ¹æ³å¯ä¾æä»¬ä½¿ç¨ï¼å®éè¦ä¼ éä¸ä¸ªæ°ç»ï¼åè¦æ¥æ¾çå
ç´ ã
int[] anArray = new int[] {1, 2, 3, 4, 5};
int index = Arrays.binarySearch(anArray, 4);âé¤äºä¸ç»´æ°ç»ï¼è¿æäºç»´æ°ç»ï¼ä¸å¦¹ä½ å¯ä»¥å»ç ç©¶ä¸ï¼æ¯å¦è¯´ç¨äºç»´æ°ç»æå°ä¸ä¸æ¨è¾ä¸è§ï¼æä»¬ä¸ä¸èä¼è®²ãâ
æ°ç»çå¤å¶
ææ¶åæä»¬éè¦å°ä¸ä¸ªæ°ç»çå¼å¤å¶å°å¦å¤ä¸ä¸ªæ°ç»å½ä¸ï¼é£å°±ä¼æ¶åå°æ°ç»å¤å¶çç¥è¯ç¹ã
å¨ String ç±»ï¼è®²å®æ°ç»å°±ä¼è®²ï¼ä¸å
¶å®ä¼ç»å¸¸éå°æ°ç»å¤å¶ï¼æ¯å¦è¯´ substring() æ¹æ³ã
public String substring(int beginIndex) {
return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}注æå
¶ä¸ç new String()ï¼å®ä¼è¿åä¸ä¸ªæ°çå符串ï¼è¿ä¸ªå符串çå¼å°±æ¯åå符串çä¸é¨åï¼è¿ä¸ªè¿ç¨å°±æ¶åå°äºæ°ç»çå¤å¶ã
public String(char value[], int offset, int count) {
this.value = Arrays.copyOfRange(value, offset, offset+count);
}å
¶ä¸ç Arrays.copyOfRange() æ¹æ³å°±æ¯ç¨æ¥å¤å¶æ°ç»çï¼æä»¬å¨è®² Arrays ç±»çæ¶åå°±ä¼è®²å°ã
å®åºå±è°ç¨çæ¯ System.arraycopy() æ¹æ³ï¼è¿ä¸ªæ¹æ³æ¯ä¸ä¸ª native æ¹æ³ï¼å®æ¯ç¨ C/C++ å®ç°çï¼æçé常é«ã

System.arraycopy æ¹æ³çå®ä¹å¦ä¸æç¤ºï¼
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);ç¨æ³å¦ä¸æç¤ºï¼
int[] array1 = {1, 2, 3};
int[] array2 = {4, 5, 6};
// å建ä¸ä¸ªæ°æ°ç»ï¼é¿åº¦ä¸ºä¸¤ä¸ªæ°ç»é¿åº¦ä¹å
int[] mergedArray = new int[array1.length + array2.length];
// å¤å¶ç¬¬ä¸ä¸ªæ°ç»å°æ°æ°ç»
System.arraycopy(array1, 0, mergedArray, 0, array1.length);
System.out.println(Arrays.toString(mergedArray));
// å¤å¶ç¬¬äºä¸ªæ°ç»å°æ°æ°ç»
System.arraycopy(array2, 0, mergedArray, array1.length, array2.length);
System.out.println(Arrays.toString(mergedArray));è¾åºç»æå¦ä¸æç¤ºï¼
[1, 2, 3, 0, 0, 0]
[1, 2, 3, 4, 5, 6]å½ç¶äºï¼æä»¬ä¹å¯ä»¥ä½¿ç¨å¾ªç¯æ¥å®ææ°ç»çå¤å¶ï¼
int[] array1 = {1, 2, 3};
int[] array2 = {4, 5, 6};
// å建ä¸ä¸ªæ°æ°ç»ï¼é¿åº¦ä¸ºä¸¤ä¸ªæ°ç»é¿åº¦ä¹å
int[] mergedArray = new int[array1.length + array2.length];
// å¤å¶ç¬¬ä¸ä¸ªæ°ç»å°æ°æ°ç»
int index = 0;
for (int element : array1) {
mergedArray[index++] = element;
}
// å¤å¶ç¬¬äºä¸ªæ°ç»å°æ°æ°ç»
for (int element : array2) {
mergedArray[index++] = element;
}å¾ç®åï¼å¾å¥½çè§£ï¼ç¸ä¿¡ä¸å¦¹ä½ ä¹è½çæã
æ°ç»è¶ç
卿们è¿è¡æ°ç»æä½çæ¶åï¼æå®¹æéå°çä¸ä¸ªé®é¢å°±æ¯æ°ç»è¶çï¼ä¹å°±æ¯ ArrayIndexOutOfBoundsException å¼å¸¸ã
int[] anArray = new int[] {1, 2, 3, 4, 5};
System.out.println(anArray[5]);ä¸é¢è¿æ®µä»£ç å°±ä¼æåºæ°ç»è¶ççå¼å¸¸ï¼å 为æ°ç»çç´¢å¼æ¯ä» 0 å¼å§çï¼æä»¥æå¤§ç´¢å¼ä¸º length - 1ï¼ä¹å°±æ¯ 4ï¼æä»¥å½æä»¬ä½¿ç¨ 5 ä½ä¸ºç´¢å¼çæ¶åï¼å°±ä¼æåºå¼å¸¸ã
æä»¥å¨æä½æ°ç»ä¹åï¼ä¸å®è¦æ³¨æç´¢å¼çèå´ã
å°ç»
好ï¼ä»å¤©æä»¬å°±å 讲å°è¿éï¼è¯´å®ï¼æå°±è·å»é³å°æ¥ä¸æ ¹ååï¼çä¸å¦¹å¨çµèåé¢ç»ä¹ äºèµ·æ¥ã
GitHub 䏿 æ 10000+ ç弿ºç¥è¯åºãäºå¥ç Java è¿é¶ä¹è·¯ã第ä¸ç PDF ç»äºæ¥äºï¼å æ¬Javaåºç¡è¯æ³ãæ°ç»&å符串ãOOPãéåæ¡æ¶ãJava IOãå¼å¸¸å¤çãJava æ°ç¹æ§ãç½ç»ç¼ç¨ãNIOãå¹¶åç¼ç¨ãJVMççï¼å ±è®¡ 32 ä¸ä½åï¼500+å¼ æç»å¾ï¼å¯ä»¥è¯´æ¯éä¿ææãé£è¶£å¹½é»â¦â¦è¯¦æ æ³ï¼å¤ªèµäºï¼GitHub 䏿 æ 10000+ ç Java æç¨
å¾®ä¿¡æ æ²é»çäº ææ«æä¸æ¹äºç»´ç å ³æ³¨äºå¥çååå ¬ä¼å·æ²é»çäºï¼åå¤ 222 å³å¯å è´¹é¢åã

