찾다
Javajava지도 시간Java arrayList 탐색의 네 가지 방법과 Java에서 ArrayList 클래스의 사용법

Java arrayList 탐색의 네 가지 방법과 Java에서 ArrayList 클래스의 사용법

package com.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ArrayListDemo {
  public static void main(String args[]){
    List<String> list = new ArrayList<String>();
    list.add("luojiahui");
    list.add("luojiafeng");
    //方法1
    Iterator it1 = list.iterator();
    while(it1.hasNext()){
      System.out.println(it1.next());
    }
    //方法2
    for(Iterator it2 = list.iterator();it2.hasNext();){
       System.out.println(it2.next());
    }
    //方法3
    for(String tmp:list){
      System.out.println(tmp);
    }
    //方法4
    for(int i = 0;i < list.size(); i ++){
      System.out.println(list.get(i));
    }
  }
}

ps: Java에서 ArrayList 클래스의 사용법

1. ArrayList란 무엇입니까

ArrayList는 MSDN 용어로 말하면 Array의 복잡한 버전입니다.

동적 증가입니다. 요소 줄이기

는 ICollection 및 IList 인터페이스를 구현합니다.

배열의 크기를 유연하게 설정합니다

2. ArrayList 사용 방법

가장 간단한 예:

ArrayList List = new ArrayList();
for( int i=0;i <10;i++ ) //给数组增加10个Int元素
List.Add(i);
//..程序做一些处理
List.RemoveAt(5);//将第6个元素移除
for( int i=0;i <3;i++ ) //再增加3个元素
List.Add(i+20);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));//返回ArrayList包含的数组

이는 ArrayList의 모든 메소드를 포함하지는 않지만 ArrayList의 가장 일반적인 사용법을 반영할 수 있는 간단한 예입니다.

3. ArrayList의 중요한 메서드 및 속성

1) 생성자

ArrayList는 세 가지 생성자를 제공합니다.
public ArrayList()
기본 생성자는 기본값(16)입니다. ) 내부 배열을 초기화하려면
public ArrayList(ICollection);
ICollection 개체로 구성하고 컬렉션의 요소를 ArrayList에 추가합니다.
public ArrayList(int)
다음을 사용하여 내부 배열을 초기화합니다. 지정된 크기

2) IsSynchronized 속성 및 ArrayList.Synchronized 메서드

IsSynchronized 속성은 현재 ArrayList 인스턴스가 스레드 동기화를 지원하는지 여부를 나타내는 반면, ArrayList.Synchronized 정적 메서드는 다음에 대한 ArrayList 래퍼를 반환합니다. 스레드 동기화.

스레드가 아닌 동기화된 인스턴스를 사용하는 경우 여러 스레드에서 액세스할 때 스레드 동기화를 유지하기 위해 잠금을 수동으로 호출해야 합니다. 예:

ArrayList list = new ArrayList();
//...
lock( list.SyncRoot ) //当ArrayList为非线程包装的时候

SyncRoot 속성은 실제로 그 자체이지만 ICollection의 SyncRoot 정의를 충족하기 위해

여기서는 소스 코드의 표준화를 유지하기 위해 여전히 SyncRoot를 사용합니다

{
list.Add( “Add a Item” );
}

ArrayList.Synchronized 메서드에서 반환된 인스턴스를 사용하는 경우 스레드 동기화를 고려할 필요가 없습니다. 실제로 이 인스턴스는 스레드로부터 안전합니다. 스레드 동기화를 보장하는 내부 클래스인 ArrayList는 이 클래스의 인스턴스를 반환하며, 그 안의 각 속성은 스레드 동기화를 보장하기 위해 lock 키워드를 사용합니다.

3) Count 속성 및 용량 속성

Count 속성은 현재 ArrayList에 포함된 요소 수입니다.
Capacity 속성은 ArrayList가 현재 포함할 수 있는 최대 수입니다. 이 속성은 수동으로 설정할 수 있지만 Count 값보다 작게 설정되면 예외가 발생합니다.

4) Add, AddRange, Remove, RemoveAt, RemoveRange, Insert, InsertRange

이 메소드들은 유사합니다.

Add 메소드는 현재 목록에 요소를 추가하는 데 사용됩니다. End
AddRange 메소드는 현재 목록의 끝에 요소 배치를 추가하는 데 사용됩니다.
Remove 메소드는 요소 자체를 참조하여 요소를 삭제하는 데 사용됩니다.
RemoveAt 메소드는 요소를 삭제하는 데 사용됩니다. , 인덱스 값으로 삭제
RemoveRange는 시작 인덱스와 삭제 횟수를 지정하여 요소를 일괄 삭제하는 데 사용됩니다.
삽입은 지정된 위치에 요소를 추가하고 끝에 있는 요소를 추가하는 데 사용됩니다. 목록이 순서대로 뒤로 이동합니다.
InsertRange가 사용됩니다. 지정된 위치에서 시작하는 요소 배치를 추가하고 목록 끝에 있는 요소는 순서대로 뒤로 이동합니다.

그 외에도 여러 가지가 있습니다. 비슷한 방법:

Clear 메서드는 기존 요소를 모두 지우는 데 사용됩니다.
Contains 메서드는 개체가 목록에 있는지 확인하는 데 사용됩니다.

항목에 대해서는 자세히 설명하지 않겠습니다. 다른 것들은 하나씩 자세히 설명되어 있는 MSDN을 확인하실 수 있습니다

5) TrimSize 메소드

이 메소드는 ArrayList를 실제 요소의 크기로 고정하는 데 사용됩니다. 동적 배열 요소가 더 이상 추가되지 않는 것으로 판단되면 이 메서드를 호출하여 사용 가능한 메모리를 해제할 수 있습니다.

6) ToArray 메서드

이 메서드는 ArrayList의 요소를 새 배열에 복사합니다.

4. ArrayList 및 배열 변환

예 1:

ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));

예 2:

ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = new Int32[List.Count];
List.CopyTo(values);

위에서는 ArrayList에서 배열로 변환하는 두 가지 방법을 소개합니다.

예 3:

ArrayList List = new ArrayList();
List.Add( “string” );
List.Add( 1 );
//往数组中添加不同类型的元素
object[] values = List.ToArray(typeof(object)); //正确
string[] values = (string[])List.ToArray(typeof(string)); //错误

변환이 가능하다는 점에서 배열과 다릅니다. Object Array에 추가하면 ArrayList에 다른 유형의 요소를 추가해도 문제가 발생하지 않지만 ArrayList 메서드를 호출할 때는 모든 요소에 대해 올바르게 변환할 수 있는 유형이나 Object 유형을 전달해야 합니다. 그렇지 않으면 변환할 수 없는 예외를 전달해야 합니다. 던져질 것이다.

5. ArrayList 사용을 위한 최고의 제안

이 섹션에서는 ArrayList와 배열의 차이점과 ArrayList의 효율성에 대해 설명합니다

1) ArrayList는 배열입니다.

ArrayList의 복잡한 버전은 내부적으로 Object 유형의 배열을 캡슐화합니다. 일반적으로 크기에 따라

이라도 배열과 본질적인 차이가 없습니다. 실제 요소 중 동적 배열 요소가 더 이상 추가되지 않는 것으로 판단되면 이 메서드를 호출하여 여유 메모리를 해제할 수 있습니다.

6) ToArray 메서드

이 메서드는 ArrayList의 요소를 새 배열에 복사합니다.

4. ArrayList 및 배열 변환

예 1:

ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));

예 2:

ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = new Int32[List.Count];
List.CopyTo(values);

위에서는 ArrayList에서 배열

으로 변환하는 두 가지 방법을 소개합니다. 예 3:

ArrayList List = new ArrayList();
List.Add( “string” );
List.Add( 1 );
//往数组中添加不同类型的元素
object[] values = List.ToArray(typeof(object)); //正确
string[] values = (string[])List.ToArray(typeof(string)); //错误

和数组不一样,因为可以转换为Object数组,所以往ArrayList里面添加不同类型的元素是不会出错的,但是当调用ArrayList方法的时候,要么传递所有元素都可以正确转型的类型或者Object类型,否则将会抛出无法转型的异常。

5、ArrayList最佳使用建议

这一节我们来讨论ArrayList与数组的差别,以及ArrayList的效率问题

1)ArrayList是Array的复杂版本

ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。

2)内部的Object类型的影响

对于一般的引用类型来说,这部分的影响不是很大,但是对于值类型来说,往ArrayList里面添加和修改元素,都会引起装箱和拆箱的操作,频繁的操作可能会影响一部分效率。 
但是恰恰对于大多数人,多数的应用都是使用值类型的数组。 
消除这个影响是没有办法的,除非你不用它,否则就要承担一部分的效率损失,不过这部分的损失不会很大。

3)数组扩容

这是对ArrayList效率影响比较大的一个因素。 
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。

例1:比如,一个可能有200个元素的数据动态添加到一个以默认16个元素大小创建的ArrayList中,将会经过:

16*2*2*2*2 = 256

四次的扩容才会满足最终的要求,那么如果一开始就以:

ArrayList List = new ArrayList( 210 ); 
的方式创建ArrayList,不仅会减少4次数组创建和Copy的操作,还会减少内存使用。

例2:预计有30个元素而创建了一个ArrayList:

ArrayList List = new ArrayList(30);

在执行过程中,加入了31个元素,那么数组会扩充到60个元素的大小,而这时候不会有新的元素再增加进来,而且有没有调用TrimSize方法,那么就有1次扩容的操作,并且浪费了29个元素大小的空间。如果这时候,用:

ArrayList List = new ArrayList(40);

那么一切都解决了。 
所以说,正确的预估可能的元素,并且在适当的时候调用TrimSize方法是提高ArrayList使用效率的重要途径。

4)频繁的调用IndexOf、Contains等方法(Sort、BinarySearch等方

法经过优化,不在此列)引起的效率损失 
首先,我们要明确一点,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法,所以实际上调用IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来的快,如果有这方面的要求,建议使用Hashtable或SortedList等键值对的集合。

ArrayList al=new ArrayList();
al.Add("How");
al.Add("are");
al.Add("you!");
al.Add(100);
al.Add(200);
al.Add(300);
al.Add(1.2);
al.Add(22.8);

更多java arrayList遍历的四种方法及Java中ArrayList类的用法相关文章请关注PHP中文网!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
JVM 성능 대 기타 언어JVM 성능 대 기타 언어May 14, 2025 am 12:16 AM

JVM 'sperformanceIscompetitive, ontotherRuntimes, 안전 및 생산성을 제공합니다

Java 플랫폼 독립성 : 사용의 예Java 플랫폼 독립성 : 사용의 예May 14, 2025 am 12:14 AM

javaachievesplatformincendenceThermeThoughthejavavirtualMachine (JVM), codeiscompiledintobytecode, notmachine-specificcode.2) bytecodeistredbythejvm, anblingcross- shoughtshoughts

JVM 아키텍처 : Java Virtual Machine에 대한 깊은 다이빙JVM 아키텍처 : Java Virtual Machine에 대한 깊은 다이빙May 14, 2025 am 12:12 AM

thejvmisanabstractcomputingmachinecrucialforrunningjavaprogramsduetoitsplatform-independentarchitection.itincludes : 1) classloaderforloadingclasses, 2) runtimeDataAreaFordatorage, 3) executionEnginewithgringreter, jitcompiler 및 ggarocubucbugecutec

JVM : JVM은 OS와 관련이 있습니까?JVM : JVM은 OS와 관련이 있습니까?May 14, 2025 am 12:11 AM

Theosasittranslatesjavabytecodeintomachine-specificinstructions, ManagesMemory 및 HandlesgarbageCollection의 Jvmhasacloserelationship

Java : 한 번 쓰기, 어디서나 달리기 (Wora) - 플랫폼 독립에 대한 깊은 다이빙Java : 한 번 쓰기, 어디서나 달리기 (Wora) - 플랫폼 독립에 대한 깊은 다이빙May 14, 2025 am 12:05 AM

Java 구현 "Write Once, Run Everywhere"는 바이트 코드로 컴파일되어 JVM (Java Virtual Machine)에서 실행됩니다. 1) Java 코드를 작성하여 바이트 코드로 컴파일하십시오. 2) 바이트 코드는 JVM이 설치된 모든 플랫폼에서 실행됩니다. 3) JNI (Java Native Interface)를 사용하여 플랫폼 별 기능을 처리하십시오. JVM 일관성 및 플랫폼 별 라이브러리 사용과 같은 과제에도 불구하고 Wora는 개발 효율성 및 배포 유연성을 크게 향상시킵니다.

Java 플랫폼 독립성 : 다른 OS와의 호환성Java 플랫폼 독립성 : 다른 OS와의 호환성May 13, 2025 am 12:11 AM

javaachievesplatformincendenceThoughthehoughthejavavirtualmachine (JVM), hittoutModification.thejvmcompileSjavacodeIntOplatform-independentByTecode, whatitTengretsAndexeSontheSpecoS, toplacetSonthecificos, toacketSecificos

Java가 여전히 강력하게 만드는 기능Java가 여전히 강력하게 만드는 기능May 13, 2025 am 12:05 AM

javaispowerfuldueToitsplatformincendence, 객체 지향적, RichandardLibrary, PerformanceCapabilities 및 StrongSecurityFeatures.1) Platform IndependenceAllowsApplicationStorunannyDevicesUpportingjava.2) 대상 지향적 프로그래밍 프로모션 Modulara

최고 Java 기능 : 개발자를위한 포괄적 인 가이드최고 Java 기능 : 개발자를위한 포괄적 인 가이드May 13, 2025 am 12:04 AM

최고 Java 기능에는 다음이 포함됩니다. 1) 객체 지향 프로그래밍, 다형성 지원, 코드 유연성 및 유지 관리 가능성 향상; 2) 예외 처리 메커니즘, 시도 캐치-패치 블록을 통한 코드 견고성 향상; 3) 쓰레기 수집, 메모리 관리 단순화; 4) 제네릭, 유형 안전 강화; 5) 코드를보다 간결하고 표현력있게 만들기위한 AMBDA 표현 및 기능 프로그래밍; 6) 최적화 된 데이터 구조 및 알고리즘을 제공하는 풍부한 표준 라이브러리.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)