好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java与scala数组及集合的基本操作对比

java与scala数组及集合的操作

这篇博客介绍了scala的数组 + 可变数组的基本使用,及其与java数组的区别

scala数组基本操作

?

1

2

3

4

5

6

7

8

9

10

def main(args: Array[String]): Unit = {

 

     //new一个大小不变的数组

     val nums = new Array[Int]( 10 ) //会被初始化为0

 

     val s = Array( "hello" , "world" ) //使用两个字符串初始化数组(记住,这里不需要new)

 

     s( 0 ) = "good bye" //使用()来访问数组

 

}

scala数组底层实现就是java数组,上述底层是java.lang.String[]

对应java代码

?

1

2

3

4

5

6

7

public static void main(String[] args) {

     int [] nums = new int [ 10 ];

 

     String[] s = new String[]{ "hello" , "world" };

 

     s[ 0 ] = "goodbye" ;

}

scala可变数组ArrayBuffer

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

def main(args: Array[String]): Unit = {

     val b = ArrayBuffer[Int]() //初始化

     //或者

     //    val b = new ArrayBuffer[Int]

 

     b += 1 //添加一个元素

     b += ( 1 , 2 , 3 , 4 , 5 ) //添加多个元素在末尾

 

     println(s "b:$b" ) //b:ArrayBuffer(1, 1, 2, 3, 4, 5)

 

     b ++= Array( 8 , 1 , 34 ) //一次添加一个数组,注意这里是数组

     println(s "b:$b" ) //b:ArrayBuffer(1, 1, 2, 3, 4, 5, 8, 1, 34)

 

     b.trimEnd( 3 ) //移除最后三个元素

     println(s "b:$b" ) //b:ArrayBuffer(1, 1, 2, 3, 4, 5)

}

java 相应 ArrayList操作

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

public static void main(String[] args) {

     List<Integer> list = new ArrayList<>();

     list.add( 1 );

 

     List<Integer> list2 = new ArrayList<>();

     list2.add( 1 );

     list2.add( 2 );

     list2.add( 3 );

     list2.add( 4 );

     list2.add( 5 );

     list.addAll(list2);

     //java一次要添加1,2,3,4,5就麻烦很多了

     // 当然使用guava的Lists.newArrayList看起来代码会简单些

     // 或者使用下面的Arrays.asList也会简单些,最主要的原因是直接构造一个含有多个数字的list原生的java支持的不好

 

     System.out.println(list); //[1, 1, 2, 3, 4, 5]

 

     list.addAll(Arrays.asList( 1 , 2 , 3 , 4 , 5 ));

     System.out.println(list); //[1, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

 

     //java没有提供原生的,移除最后5个元素的函数

 

     list.add( 1 , 6 ); //List一次只能添加一个元素

     System.out.println(list); //[1, 6, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

 

     list.remove( 1 );

     System.out.println(list); //[1, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

 

     //list也不支持,移除第index上的连续n个数字

 

     Object[] array = list.toArray(); //转数组

     Arrays.asList(array); //转list

}

scala 的数组遍历

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

def main(args: Array[String]): Unit = {

   val a = Array( 1 , 2 , 3 , 4 , 5 )

   for (i <- 0 until a.length) {

     println(s "i:$i value:${a(i)}" )

   }

 

   println( "-----------" )

 

   //遍历隔一个

   for (i <- 0 until a.length by 2 ) {

     println(s "i:$i value:${a(i)}" )

   }

 

   println( "-----------" )

 

   //倒着遍历

   for (i <- 0 until a.length reverse) {

     println(s "i:$i value:${a(i)}" )

   }

 

   println( "-----------" )

 

   //如果不需要index

   for (ele <- a) {

     println(s "value:${ele}" )

   }

}

java数组的遍历

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

public static void main(String[] args) {

     int [] a = new int []{ 1 , 2 , 3 , 4 , 5 };

 

     for ( int i = 0 ; i < a.length; i++) {

         System.out.println( "index:" + i + ",value:" + a[i]);

     }

 

     System.out.println( "-----------------" );

 

     //遍历隔着2

     for ( int i = 0 ; i < a.length; i += 2 ) {

         System.out.println( "index:" + i + ",value:" + a[i]);

     }

 

     System.out.println( "-----------------" );

 

     //倒着遍历

     for ( int i = a.length - 1 ; i >= 0 ; i--) {

         System.out.println( "index:" + i + ",value:" + a[i]);

     }

 

     System.out.println( "-----------------" );

 

     //不关心index

     for ( int value : a) {

         System.out.println( "value:" + value);

     }

}

java数组和scala数组遍历差不多,需要提的一点是,scala的遍历方式比较统一,无论是Array还是ArrayBuffer,java的list和array就不大一样(array使用[]取值,list使用get()取值,而scala都是())

对比下就知道,scala提供的可变数组比java的更加强大易用。

scala数组与java数组对比

java数组不是个类,scala数组是类

java定义

?

1

int [] a = new int []{ 1 , 2 , 5 };

scala定义 ,scala这个实际是个语法糖,调用了apply方法

?

1

val a=Array( 1 , 2 , 5 )

源码上

scala

?

1

2

3

4

5

6

7

8

9

10

final class Array[T](_length: Int) extends java.io.Serializable with java.lang.Cloneable {

   /** The length of the array */

   def length: Int = throw new Error()

   // The element at given index.

   def apply(i: Int): T = throw new Error()

   // Update the element at given index.

   def update(i: Int, x: T) { throw new Error() }

   //Clone the Array.

   override def clone(): Array[T] = throw new Error()

}

针对不同的泛型T,scala有不同的实现,比如针对Int

?

1

2

3

4

5

6

7

8

9

/** Creates an array of `Int` objects */

  // Subject to a compiler optimization in Cleanup, see above.

  def apply(x: Int, xs: Int*): Array[Int] = {

    val array = new Array[Int](xs.length + 1 )

    array( 0 ) = x

    var i = 1

    for (x <- xs.iterator) { array(i) = x; i += 1 }

    array

  }

java 源码

java 找不到Array的源码~!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://HdhCmsTestjianshu测试数据/p/2914a94b8022

查看更多关于java与scala数组及集合的基本操作对比的详细内容...

  阅读:15次