本文主要总结Java程序中的集合部分,主要涉及:Array、Collector、Map

Array

数组是一种效率最高的存储和随机访问对象引出序列的方式

所付出的代价就是数组对象的大小被固定,且再其生命周期中不可改变。

数组针对数据类型的检查可以在编译时进行,而其他容器需要泛型配合(没有泛型时,默认Object)

实例化、输出

实例化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

// 静态实例化:其他引用类型也同样适用
String[] words1 = new String[]{"Line", "Java", "Scala"} ;
String[] words = {"Line", "Java", "Scala"} ;

/**
* 动态实例化:
* 没指定元素值时,值为元素类型默认值
* []: 是访问数组元素的唯一方法
*/
String[] words2 = new String[3] ;
words2[0] = "Line" ;
words2[1] = "Java" ;
words2[2] = "Scala" ;



输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

String[] words = {"Line", "Java", "Scala"} ; // 其他用引用类型同样适用

// 注意:数组并不能直接输出:// [Ljava.lang.String;@1b6d3586
System.out.println(words);

// 作为字符串整体输出
System.out.println(Arrays.toString(words));

// 迭代元素:foreach
for (String word : words) {
System.out.println(word);
}

// for循环输出元素
for (int i = 0; i < words.length; i++) {
Syste
m.out.println(words[i]);
}



方法-对象

  length是数组中唯一可以访问的字段或方法。

方法-类库支持

  • 原数组改变:排序、复制、填充
  • 原数组不变:转列表、输出、查找、判断
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

String[] words = {"Line", "Java", "Scala"} ; // 其他用引用类型同样适用
String[] words1 = new String[]{"Line", "Java", "Scala"} ;

// 输出
String wordStr = Arrays.toString(words);

/**
* 排序和查找
* 尽量先排序,再查找
* 如果是引用类型,二者需传入对应的Comparator类
* 如果数组中有相同元素,可以不确定是查找的哪个
*/
java.util.Arrays.sort(words);
int index = Arrays.binarySearch(words, "Line");
System.out.println(index);

// 比较: 对比数组的长度和元素值
System.out.println(Arrays.equals(words,words1));

// Array => List
List<String> strings = Arrays.asList(words);

// 填充元素值,可以局部填充
Arrays.fill(words1,"Fill");

// 复制:比for循环复制快很多确定下:0是索引
System.arraycopy(words,0,words1,0,3);



引用传递

 参考对象的引用传递和内存图。



Collection

List

Set

HashSet:引用对象要实现hashCode()和equal()方法,不然也不会去重。

Stack

Queue



Map