Scala (7) - ① - 데이터 구조 - 집합 - Array 와 List, ListBuffer

9208 단어
자바 의 가 변 집합
  • 불가 변 집합 개념 (자바 의 경우)
  • public class ImmutableDemo01ForJava {
       public static void main(String[] args) {
           // 1.     ,    ,           
           int []nums = new int[3];
           nums[2] = 2;
           //  nums[3] = 1    
    
           // 2.    ,          
    ArrayList arrayList = new ArrayList();
           arrayList.add("t1");
           System.out.println(arrayList.hashCode());
           arrayList.add("t2");
           System.out.println(arrayList.hashCode());
       }
    }
    

    스칼라 의 집합
    특징.
  • Scala 동시 지원 ,
  • 두 개의 주요 패키지: 가 변 집합: scala. collection. immutable 가 변 집합: scala. collection. mutable
  • Scala 는 기본적으로 가 변 집합 을 사용 합 니 다. 거의 모든 집합 류 에 대해 Scala 는 가 변 (mutable) 과 가 변 (immutable) 버 전
  • 을 동시에 제공 합 니 다.
  • Scala 의 집합 은 세 가지 유형 이 있 습 니 다. Seq, Set, Map 모든 집합 은 Iterable 특질 에서 확장 되 고 Scala 에서 집합 은 가 변 (mutable) 과 가 변 (immutable) 두 가지 유형 이 있 습 니 다.
  • 예 를 들다
  • 불가 변 집합: scala 불가 변 집합, 바로 이 집합 자체 가 동적 으로 변화 할 수 없다 는 것 이다. (자바 와 유사 한 배열 은 동적 으로 증가 할 수 없다)
  • 가 변 집합: 가 변 집합, 바로 이 집합 자체 가 동태 적 으로 변화 할 수 있 는 것 이다. (예 를 들 어 Array List, 동태 적 으로 증가 할 수 있 는 것)
  • 가 변 집합 계승 단계 일란 도
    image.png
    가 변 집합 계승 차원 일란 도
    image.png
    세부 사항
  • Seq 는 자바 에 없 는 것 이 고 List 는 Seq 에 속 하기 때문에 이곳 의 List 는 자바 와 다르다.
  • for 순환 에 있 는 1 to 3 은 IndexSeq 에 기반 한 벡터
  • 입 니 다.
  • String 역시 indexSeq
  • 에 속한다.
  • Queue StackLinearSeq 에 속한다. 즉 의 것 이다.
  • IndexSeqLinearSeq. IndexSeq 는 색인 을 바탕 으로 하 는 서열 이 고 LinearSeq 은 선형 서열
  • 이다.
    ① 배열
    Why
    Scala 는 를 동시에 지원 합 니 다. 가 변 집합 은 스 레 드 가 안전 합 니 다.
  • 대기 열의 응용 장면 추천 시스템 은 사용자 가 최근 에 조회 한 10 개의 상품 을 원한 다.
  • How
  • 학습 집합의 창설, 수정, 삭제, 증가
  • 정수 그룹 - Array
    창 - 방식 1 - new Array
    /**
      * @author sweetcs
      */
    object ArrayDemo01 {
      def main(args: Array[String]): Unit = {
    
        //     
        var arr = new Array[Int](4)
        println("    =" + arr.length)
        println("      :")
        for (item 

    창 - 방식 2 - Array
    /**
      * @author sweetcs
      */
    object ArrayDemo02ForApply {
      def main(args: Array[String]): Unit = {
        //         Any.          
        var array = Array(1, 2, "beijing")
    
        //         Int.          
        var arrayOfInts = Array(1,2)
    
    
        for (item 

    길 어 지 는 배열 - Array Buffer
    창 - 길 어 지 는 배열 의 첨삭 검사
    /**
      * @author sweetcs
      */
    object MutableArrayDemo01 {
      def main(args: Array[String]): Unit = {
        
        val arrayBuffer = ArrayBuffer[Any](2,3,"beijing")
        println(arrayBuffer(2))
    
        println(arrayBuffer.hashCode())
        //  
        arrayBuffer.append(5, 6)
        println(arrayBuffer.hashCode())
    
        //  
        arrayBuffer.remove(0)
        //  
        for (item 

    정장 수조 와 변장 수조 의 전환
  • toArray
  • toBuffer
  • /**
      * @author sweetcs
      */
    object MutableArrayDemo02ForTranslateImutable {
      def main(args: Array[String]): Unit = {
    
        val arrayBuffer = ArrayBuffer(1,2,"beijing")
        val array = arrayBuffer.toArray
        println(array.hashCode(), arrayBuffer.hashCode())
        println("       ")
        for (item 

    다 차원 배열
    문법
    //     3    Double  
    val arr = Array.ofDim[Double](3,4)
    

    다 차원 배열 데모
    /**
      * @author sweetcs
      */
    object ArrayDemo05ForMultiplyDimArray {
      def main(args: Array[String]): Unit = {
    
        val arr = Array.ofDim[Int](3, 4)
    
        //  
        println(" case==========")
        for (row 

    자바 배열 (List) 과 스칼라 배열 (Array Buffer) 의 상호 전환
  • Scala->Java
  • object ArrayDemo06ForScalaArrayToJavaArray {
    
      def main(args: Array[String]): Unit = {
    
        //   ArrayBuffer
        val arr = ArrayBuffer("1", "2", "3")
    
        //   import             【           】
        //implicit def bufferAsJavaList[A](b : scala.collection.mutable.Buffer[A]) : java.util.List[A]
        import scala.collection.JavaConversions.bufferAsJavaList
    
        //       
        val javaArr = new ProcessBuilder(arr)
    
        //     List
        val arrList = javaArr.command()
    
        println(arrList) //   [1, 2, 3]
      }
    }
    
    
  • Java->Scala
  • object ArrayDemo07ForJavaArrayToScalaArray {
      def main(args: Array[String]): Unit = {
    
        val arrList = new java.util.ArrayList[String]()
    
        import scala.collection.JavaConversions.asScalaBuffer
        import scala.collection.mutable
        // java.util.List ==> Buffer
        val scalaArr: mutable.Buffer[String] = arrList
        scalaArr.append("jack")
        scalaArr.append("tom")
        println(scalaArr)
        scalaArr.remove(0)
        println(scalaArr) // (2,3,jack,tom)
    
      }
    }
    

    What
  • : 집합 자체 가 변화 할 수 없고 자바 의 배열 과 유사 하 며 동태 적 인 성장 이 아니다
  • : 집합 자체 가 변화 할 수 있다
  • toBuffer 의 밑바닥 실현 은 또 하나의 Array Buffer 를 재 구성 하여 이 Array Buffer 실례 에 데 이 터 를 복사 합 니 다
  •   override def toBuffer[A1 >: A]: mutable.Buffer[A1] = {
        val result = new mutable.ArrayBuffer[A1](size)
        copyToBuffer(result)
        result
      }
    

    Details
  • Scala 가 만 든 집합 은 거의 모든 것 입 니 다.
  • Scala 집합 집합 3 대 유형 Seq\Set\Map
  • Array Buffer 는 로 Array List
  • 와 유사 합 니 다.
  • 정수 조 와 길 어 지 는 수조 , , 낡은 수조
  • 를 바 꾸 지 않 는 다.
    ② 원조
    Why
  • 원 조 는 함께 놓 고 싶 은 수 요 를 해결 하 는 데 쓰 인 다.
  • 원 조 는 하나의 용기 로 이해 할 수 있 고 다양한 유형의 데 이 터 를 저장 할 수 있다.
  • How
    원 그룹 문법
    작은 괄호 로 원 그룹 을 표시 합 니 다.
    val t = (1,23,"we are")
    

    모듈 데모
  • 원 그룹의 생 성과 원 그룹 유형
  • object TupleDemo01 {
      def main(args: Array[String]): Unit = {
    
        val tuple1 = (1,2,3,4,"hello")
        println(tuple1, tuple1.getClass) // ((1,2,3,4,hello),class scala.Tuple5)
    
      }
    }
    
  • 원 그룹 접근, 번호 방식 (1 시작), 색인 방식 (0 시작)
  • 원 조 를 옮 겨 다 니 려 면 사용 해 야 합 니 다
  • object TupleDemo02ForAccess {
      def main(args: Array[String]): Unit = {
    
        val tuple = (1, 2, 3, "beijing")
    
        println(tuple._1)
        println(tuple.productElement(0))
    
        println("     ")
        //     ,     
        for (item 

    What
    원 그룹의 접근 - 색인 방식 (0 시작) 원리
      @throws(classOf[IndexOutOfBoundsException])
      override def productElement(n: Int) = n match { 
        case 0 => _1
        case 1 => _2
        case 2 => _3
        case 3 => _4
        case _ => throw new IndexOutOfBoundsException(n.toString())
     }
    

    Details
  • 컴 파일 기간 은 Tuple 의 데이터 개수 에 따라 대응 하 는 모듈 형식 을 만 듭 니 다. 예 를 들 어 Tuple 5 는 이 모듈 에 5 개의 요소 가 있 음 을 표시 합 니 다.
  • 이 가장 많 았 다 개.
  • ③ List
    Why
    List 는 Seq 의 하위 클래스 로 요 소 를 순서대로 저장 합 니 다.
    How
    가 변 목록
  • list 의 생 성과 접근
  •  val list = List(1, 2, 3, "beijing")
    
  • list 요소 의 추가 방식, 사용 +: 또는: +, 사칭 은 list 이 고 새로운 List 대상 코드
  • 를 되 돌려 줍 니 다.
    /**
      * @author sweetcs
      */
    object ListDemo02ForAppendAndReturnNewList {
      def main(args: Array[String]): Unit = {
        val list = List(1, 2, 3, "beijing")
    
        //         
        val newList = list :+ 6
    
        //        
        val newList02 = 6 +: list
        println(s"list hashcode = ${list.hashCode()}, newList = ${newList.hashCode()}, newList02 = ${newList02.hashCode()}")
        println("newList= " + newList)
        println("newList02= " + newList02)
      }
    }
    
    

    출력
    list hashcode = -1049219423, newList = 173175143, newList02 = -1337286218
    newList= List(1, 2, 3, beijing, 6)
    newList02= List(6, 1, 2, 3, beijing)
    
  • :: 와:: 집합 추가
  • object ListDemo02ForAppendAndReturnNewList {
      def main(args: Array[String]): Unit = {
        val list = List(1, 2, 3, "beijing")
    
        //         
        val newList = list :+ 6
    
        //   ::    ,                  .
        //   :::    ,                  
        val newList03 = 4 :: 5 :: 6 :: 7 :: list :: Nil
        println(newList03)
    
    
        val newList04 = 4 :: 5 :: 6 :: 7 :: list ::: Nil
        println(newList04)
      }
    }
    

    가 변 목록 - 리스트 버퍼
    ListBuffer 는 가 변 적 인 list 집합 으로 요 소 를 추가, 삭제 할 수 있 으 며 ListBuffer 는 시퀀스 에 속 합 니 다.
    object ListDemo03ForListBuffer {
      def main(args: Array[String]): Unit = {
        val lst0 = ListBuffer[Int](1, 2, 3)
        //    
        println("lst0(2)=" + lst0(2)) //    lst0(2)= 3
        for (item 

    Details
  • Scala 의 List 는 요 소 를 저장 할 수 있 고 자바 의 List 는 인터페이스
  • 입 니 다.
  • List 는 Seq 에 속 하고 기본 적 인 상황 에서 22
  • List 는 scala 가방 대상 에서 성명 한 것 이기 때문에 다른 가방 을 도입 하지 않 아 도 사용 할 수 있다 List List
  • : 연산 시 집합 대상 은 반드시 val List = scala.collection.immutable.List 에 두 어야 한다.
  • :: 연산 자 는 집합 중의 모든 요 소 를 집합 에 넣 고 좌우 양쪽 모두 집합 해 야 합 니 다.
  • 좋은 웹페이지 즐겨찾기